// Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on
// an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the
// specific language governing permissions and limitations under the License.

//------------------------------------------------------------------------------
// <auto-generated>
//     This code was generated by google-apis-code-generator 1.5.1
//     C# generator version: 1.22.0
//
//     Changes to this file may cause incorrect behavior and will be lost if
//     the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------

/**
 * \brief
 *   Genomics API Version v1
 *
 * \section ApiInfo API Version Information
 *    <table>
 *      <tr><th>API
 *          <td><a href='https://cloud.google.com/genomics'>Genomics API</a>
 *      <tr><th>API Version<td>v1
 *      <tr><th>API Rev<td>20170321 (810)
 *      <tr><th>API Docs
 *          <td><a href='https://cloud.google.com/genomics'>
 *              https://cloud.google.com/genomics</a>
 *      <tr><th>Discovery Name<td>genomics
 *    </table>
 *
 * \section ForMoreInfo For More Information
 *
 * The complete API documentation for using Genomics API can be found at
 * <a href='https://cloud.google.com/genomics'>https://cloud.google.com/genomics</a>.
 *
 * For more information about the Google APIs Client Library for .NET, see
 * <a href='https://developers.google.com/api-client-library/dotnet/get_started'>
 * https://developers.google.com/api-client-library/dotnet/get_started</a>
 */

namespace Google.Apis.Genomics.v1
{
    /// <summary>The Genomics Service.</summary>
    public class GenomicsService : Google.Apis.Services.BaseClientService
    {
        /// <summary>The API version.</summary>
        public const string Version = "v1";

        /// <summary>The discovery version used to generate this service.</summary>
        public static Google.Apis.Discovery.DiscoveryVersion DiscoveryVersionUsed =
            Google.Apis.Discovery.DiscoveryVersion.Version_1_0;

        /// <summary>Constructs a new service.</summary>
        public GenomicsService() :
            this(new Google.Apis.Services.BaseClientService.Initializer()) {}

        /// <summary>Constructs a new service.</summary>
        /// <param name="initializer">The service initializer.</param>
        public GenomicsService(Google.Apis.Services.BaseClientService.Initializer initializer)
            : base(initializer)
        {
            annotations = new AnnotationsResource(this);
            annotationsets = new AnnotationsetsResource(this);
            callsets = new CallsetsResource(this);
            datasets = new DatasetsResource(this);
            operations = new OperationsResource(this);
            readgroupsets = new ReadgroupsetsResource(this);
            reads = new ReadsResource(this);
            references = new ReferencesResource(this);
            referencesets = new ReferencesetsResource(this);
            variants = new VariantsResource(this);
            variantsets = new VariantsetsResource(this);
        }

        /// <summary>Gets the service supported features.</summary>
        public override System.Collections.Generic.IList<string> Features
        {
            get { return new string[0]; }
        }

        /// <summary>Gets the service name.</summary>
        public override string Name
        {
            get { return "genomics"; }
        }

        /// <summary>Gets the service base URI.</summary>
        public override string BaseUri
        {
            get { return "https://genomics.googleapis.com/"; }
        }

        /// <summary>Gets the service base path.</summary>
        public override string BasePath
        {
            get { return ""; }
        }

        /// <summary>Available OAuth 2.0 scopes for use with the Genomics API.</summary>
        public class Scope
        {
            /// <summary>View and manage your data in Google BigQuery</summary>
            public static string Bigquery = "https://www.googleapis.com/auth/bigquery";

            /// <summary>View and manage your data across Google Cloud Platform services</summary>
            public static string CloudPlatform = "https://www.googleapis.com/auth/cloud-platform";

            /// <summary>Manage your data in Google Cloud Storage</summary>
            public static string DevstorageReadWrite = "https://www.googleapis.com/auth/devstorage.read_write";

            /// <summary>View and manage Genomics data</summary>
            public static string Genomics = "https://www.googleapis.com/auth/genomics";

            /// <summary>View Genomics data</summary>
            public static string GenomicsReadonly = "https://www.googleapis.com/auth/genomics.readonly";

        }



        private readonly AnnotationsResource annotations;

        /// <summary>Gets the Annotations resource.</summary>
        public virtual AnnotationsResource Annotations
        {
            get { return annotations; }
        }

        private readonly AnnotationsetsResource annotationsets;

        /// <summary>Gets the Annotationsets resource.</summary>
        public virtual AnnotationsetsResource Annotationsets
        {
            get { return annotationsets; }
        }

        private readonly CallsetsResource callsets;

        /// <summary>Gets the Callsets resource.</summary>
        public virtual CallsetsResource Callsets
        {
            get { return callsets; }
        }

        private readonly DatasetsResource datasets;

        /// <summary>Gets the Datasets resource.</summary>
        public virtual DatasetsResource Datasets
        {
            get { return datasets; }
        }

        private readonly OperationsResource operations;

        /// <summary>Gets the Operations resource.</summary>
        public virtual OperationsResource Operations
        {
            get { return operations; }
        }

        private readonly ReadgroupsetsResource readgroupsets;

        /// <summary>Gets the Readgroupsets resource.</summary>
        public virtual ReadgroupsetsResource Readgroupsets
        {
            get { return readgroupsets; }
        }

        private readonly ReadsResource reads;

        /// <summary>Gets the Reads resource.</summary>
        public virtual ReadsResource Reads
        {
            get { return reads; }
        }

        private readonly ReferencesResource references;

        /// <summary>Gets the References resource.</summary>
        public virtual ReferencesResource References
        {
            get { return references; }
        }

        private readonly ReferencesetsResource referencesets;

        /// <summary>Gets the Referencesets resource.</summary>
        public virtual ReferencesetsResource Referencesets
        {
            get { return referencesets; }
        }

        private readonly VariantsResource variants;

        /// <summary>Gets the Variants resource.</summary>
        public virtual VariantsResource Variants
        {
            get { return variants; }
        }

        private readonly VariantsetsResource variantsets;

        /// <summary>Gets the Variantsets resource.</summary>
        public virtual VariantsetsResource Variantsets
        {
            get { return variantsets; }
        }
    }

    ///<summary>A base abstract class for Genomics requests.</summary>
    public abstract class GenomicsBaseServiceRequest<TResponse> : Google.Apis.Requests.ClientServiceRequest<TResponse>
    {
        ///<summary>Constructs a new GenomicsBaseServiceRequest instance.</summary>
        protected GenomicsBaseServiceRequest(Google.Apis.Services.IClientService service)
            : base(service)
        {
        }

        /// <summary>V1 error format.</summary>
        [Google.Apis.Util.RequestParameterAttribute("$.xgafv", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<XgafvEnum> Xgafv { get; set; }

        /// <summary>V1 error format.</summary>
        public enum XgafvEnum
        {
            /// <summary>v1 error format</summary>
            [Google.Apis.Util.StringValueAttribute("1")]
            Value1,
            /// <summary>v2 error format</summary>
            [Google.Apis.Util.StringValueAttribute("2")]
            Value2,
        }

        /// <summary>OAuth access token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("access_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string AccessToken { get; set; }

        /// <summary>Data format for response.</summary>
        /// [default: json]
        [Google.Apis.Util.RequestParameterAttribute("alt", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<AltEnum> Alt { get; set; }

        /// <summary>Data format for response.</summary>
        public enum AltEnum
        {
            /// <summary>Responses with Content-Type of application/json</summary>
            [Google.Apis.Util.StringValueAttribute("json")]
            Json,
            /// <summary>Media download with context-dependent Content-Type</summary>
            [Google.Apis.Util.StringValueAttribute("media")]
            Media,
            /// <summary>Responses with Content-Type of application/x-protobuf</summary>
            [Google.Apis.Util.StringValueAttribute("proto")]
            Proto,
        }

        /// <summary>OAuth bearer token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("bearer_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string BearerToken { get; set; }

        /// <summary>JSONP</summary>
        [Google.Apis.Util.RequestParameterAttribute("callback", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Callback { get; set; }

        /// <summary>Selector specifying which fields to include in a partial response.</summary>
        [Google.Apis.Util.RequestParameterAttribute("fields", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Fields { get; set; }

        /// <summary>API key. Your API key identifies your project and provides you with API access, quota, and reports.
        /// Required unless you provide an OAuth 2.0 token.</summary>
        [Google.Apis.Util.RequestParameterAttribute("key", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string Key { get; set; }

        /// <summary>OAuth 2.0 token for the current user.</summary>
        [Google.Apis.Util.RequestParameterAttribute("oauth_token", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string OauthToken { get; set; }

        /// <summary>Pretty-print response.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("pp", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> Pp { get; set; }

        /// <summary>Returns response with indentations and line breaks.</summary>
        /// [default: true]
        [Google.Apis.Util.RequestParameterAttribute("prettyPrint", Google.Apis.Util.RequestParameterType.Query)]
        public virtual System.Nullable<bool> PrettyPrint { get; set; }

        /// <summary>Available to use for quota purposes for server-side applications. Can be any arbitrary string
        /// assigned to a user, but should not exceed 40 characters.</summary>
        [Google.Apis.Util.RequestParameterAttribute("quotaUser", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string QuotaUser { get; set; }

        /// <summary>Legacy upload protocol for media (e.g. "media", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("uploadType", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadType { get; set; }

        /// <summary>Upload protocol for media (e.g. "raw", "multipart").</summary>
        [Google.Apis.Util.RequestParameterAttribute("upload_protocol", Google.Apis.Util.RequestParameterType.Query)]
        public virtual string UploadProtocol { get; set; }

        /// <summary>Initializes Genomics parameter list.</summary>
        protected override void InitParameters()
        {
            base.InitParameters();

            RequestParameters.Add(
                "$.xgafv", new Google.Apis.Discovery.Parameter
                {
                    Name = "$.xgafv",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "access_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "access_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "alt", new Google.Apis.Discovery.Parameter
                {
                    Name = "alt",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "json",
                    Pattern = null,
                });
            RequestParameters.Add(
                "bearer_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "bearer_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "callback", new Google.Apis.Discovery.Parameter
                {
                    Name = "callback",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "fields", new Google.Apis.Discovery.Parameter
                {
                    Name = "fields",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "key", new Google.Apis.Discovery.Parameter
                {
                    Name = "key",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "oauth_token", new Google.Apis.Discovery.Parameter
                {
                    Name = "oauth_token",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "pp", new Google.Apis.Discovery.Parameter
                {
                    Name = "pp",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "prettyPrint", new Google.Apis.Discovery.Parameter
                {
                    Name = "prettyPrint",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = "true",
                    Pattern = null,
                });
            RequestParameters.Add(
                "quotaUser", new Google.Apis.Discovery.Parameter
                {
                    Name = "quotaUser",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "uploadType", new Google.Apis.Discovery.Parameter
                {
                    Name = "uploadType",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
            RequestParameters.Add(
                "upload_protocol", new Google.Apis.Discovery.Parameter
                {
                    Name = "upload_protocol",
                    IsRequired = false,
                    ParameterType = "query",
                    DefaultValue = null,
                    Pattern = null,
                });
        }
    }

    /// <summary>The "annotations" collection of methods.</summary>
    public class AnnotationsResource
    {
        private const string Resource = "annotations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AnnotationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates one or more new annotations atomically. All annotations must belong to the same annotation
        /// set. Caller must have WRITE permission for this annotation set. For optimal performance, batch positionally
        /// adjacent annotations together.
        ///
        /// If the request has a systemic issue, such as an attempt to write to an inaccessible annotation set, the
        /// entire RPC will fail accordingly. For lesser data issues, when possible an error will be isolated to the
        /// corresponding batch entry in the response; the remaining well formed annotations will be created normally.
        ///
        /// For details on the requirements for each individual annotation resource, see CreateAnnotation.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual BatchCreateRequest BatchCreate(Google.Apis.Genomics.v1.Data.BatchCreateAnnotationsRequest body)
        {
            return new BatchCreateRequest(service, body);
        }

        /// <summary>Creates one or more new annotations atomically. All annotations must belong to the same annotation
        /// set. Caller must have WRITE permission for this annotation set. For optimal performance, batch positionally
        /// adjacent annotations together.
        ///
        /// If the request has a systemic issue, such as an attempt to write to an inaccessible annotation set, the
        /// entire RPC will fail accordingly. For lesser data issues, when possible an error will be isolated to the
        /// corresponding batch entry in the response; the remaining well formed annotations will be created normally.
        ///
        /// For details on the requirements for each individual annotation resource, see CreateAnnotation.</summary>
        public class BatchCreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.BatchCreateAnnotationsResponse>
        {
            /// <summary>Constructs a new BatchCreate request.</summary>
            public BatchCreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.BatchCreateAnnotationsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.BatchCreateAnnotationsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "batchCreate"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotations:batchCreate"; }
            }

            /// <summary>Initializes BatchCreate parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Creates a new annotation. Caller must have WRITE permission for the associated annotation set.
        ///
        /// The following fields are required:
        ///
        /// * annotationSetId * referenceName or referenceId
        ///
        /// ### Transcripts
        ///
        /// For annotations of type TRANSCRIPT, the following fields of transcript must be provided:
        ///
        /// * exons.start * exons.end
        ///
        /// All other fields may be optionally specified, unless documented as being server-generated (for example, the
        /// `id` field). The annotated range must be no longer than 100Mbp (mega base pairs). See the Annotation
        /// resource for additional restrictions on each field.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.Annotation body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new annotation. Caller must have WRITE permission for the associated annotation set.
        ///
        /// The following fields are required:
        ///
        /// * annotationSetId * referenceName or referenceId
        ///
        /// ### Transcripts
        ///
        /// For annotations of type TRANSCRIPT, the following fields of transcript must be provided:
        ///
        /// * exons.start * exons.end
        ///
        /// All other fields may be optionally specified, unless documented as being server-generated (for example, the
        /// `id` field). The annotated range must be no longer than 100Mbp (mega base pairs). See the Annotation
        /// resource for additional restrictions on each field.</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Annotation>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Annotation body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Annotation Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotations"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes an annotation. Caller must have WRITE permission for the associated annotation
        /// set.</summary>
        /// <param name="annotationId">The ID of the annotation to be deleted.</param>
        public virtual DeleteRequest Delete(string annotationId)
        {
            return new DeleteRequest(service, annotationId);
        }

        /// <summary>Deletes an annotation. Caller must have WRITE permission for the associated annotation
        /// set.</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string annotationId)
                : base(service)
            {
                AnnotationId = annotationId;
                InitParameters();
            }


            /// <summary>The ID of the annotation to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("annotationId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AnnotationId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotations/{annotationId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "annotationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "annotationId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets an annotation. Caller must have READ permission for the associated annotation set.</summary>
        /// <param name="annotationId">The ID of the annotation to be retrieved.</param>
        public virtual GetRequest Get(string annotationId)
        {
            return new GetRequest(service, annotationId);
        }

        /// <summary>Gets an annotation. Caller must have READ permission for the associated annotation set.</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Annotation>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string annotationId)
                : base(service)
            {
                AnnotationId = annotationId;
                InitParameters();
            }


            /// <summary>The ID of the annotation to be retrieved.</summary>
            [Google.Apis.Util.RequestParameterAttribute("annotationId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AnnotationId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotations/{annotationId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "annotationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "annotationId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for annotations that match the given criteria. Results are ordered by genomic coordinate
        /// (by reference sequence, then position). Annotations with equivalent genomic coordinates are returned in an
        /// unspecified order. This order is consistent, such that two queries for the same content (regardless of page
        /// size) yield annotations in the same order across their respective streams of paginated responses. Caller
        /// must have READ permission for the queried annotation sets.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchAnnotationsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for annotations that match the given criteria. Results are ordered by genomic coordinate
        /// (by reference sequence, then position). Annotations with equivalent genomic coordinates are returned in an
        /// unspecified order. This order is consistent, such that two queries for the same content (regardless of page
        /// size) yield annotations in the same order across their respective streams of paginated responses. Caller
        /// must have READ permission for the queried annotation sets.</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchAnnotationsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchAnnotationsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchAnnotationsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotations/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates an annotation. Caller must have WRITE permission for the associated dataset.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="annotationId">The ID of the annotation to be updated.</param>
        public virtual UpdateRequest Update(Google.Apis.Genomics.v1.Data.Annotation body, string annotationId)
        {
            return new UpdateRequest(service, body, annotationId);
        }

        /// <summary>Updates an annotation. Caller must have WRITE permission for the associated dataset.</summary>
        public class UpdateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Annotation>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Annotation body, string annotationId)
                : base(service)
            {
                AnnotationId = annotationId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the annotation to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("annotationId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AnnotationId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. Mutable fields are name, variant,
            /// transcript, and info. If unspecified, all mutable fields will be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Annotation Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotations/{annotationId}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "annotationId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "annotationId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "annotationsets" collection of methods.</summary>
    public class AnnotationsetsResource
    {
        private const string Resource = "annotationsets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public AnnotationsetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new annotation set. Caller must have WRITE permission for the associated dataset.
        ///
        /// The following fields are required:
        ///
        /// * datasetId * referenceSetId
        ///
        /// All other fields may be optionally specified, unless documented as being server-generated (for example, the
        /// `id` field).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.AnnotationSet body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new annotation set. Caller must have WRITE permission for the associated dataset.
        ///
        /// The following fields are required:
        ///
        /// * datasetId * referenceSetId
        ///
        /// All other fields may be optionally specified, unless documented as being server-generated (for example, the
        /// `id` field).</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.AnnotationSet>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.AnnotationSet body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.AnnotationSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotationsets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes an annotation set. Caller must have WRITE permission for the associated annotation
        /// set.</summary>
        /// <param name="annotationSetId">The ID of the annotation set to be deleted.</param>
        public virtual DeleteRequest Delete(string annotationSetId)
        {
            return new DeleteRequest(service, annotationSetId);
        }

        /// <summary>Deletes an annotation set. Caller must have WRITE permission for the associated annotation
        /// set.</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string annotationSetId)
                : base(service)
            {
                AnnotationSetId = annotationSetId;
                InitParameters();
            }


            /// <summary>The ID of the annotation set to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("annotationSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AnnotationSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotationsets/{annotationSetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "annotationSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "annotationSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets an annotation set. Caller must have READ permission for the associated dataset.</summary>
        /// <param name="annotationSetId">The ID of the annotation set to be retrieved.</param>
        public virtual GetRequest Get(string annotationSetId)
        {
            return new GetRequest(service, annotationSetId);
        }

        /// <summary>Gets an annotation set. Caller must have READ permission for the associated dataset.</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.AnnotationSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string annotationSetId)
                : base(service)
            {
                AnnotationSetId = annotationSetId;
                InitParameters();
            }


            /// <summary>The ID of the annotation set to be retrieved.</summary>
            [Google.Apis.Util.RequestParameterAttribute("annotationSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AnnotationSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotationsets/{annotationSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "annotationSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "annotationSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for annotation sets that match the given criteria. Annotation sets are returned in an
        /// unspecified order. This order is consistent, such that two queries for the same content (regardless of page
        /// size) yield annotation sets in the same order across their respective streams of paginated responses. Caller
        /// must have READ permission for the queried datasets.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchAnnotationSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for annotation sets that match the given criteria. Annotation sets are returned in an
        /// unspecified order. This order is consistent, such that two queries for the same content (regardless of page
        /// size) yield annotation sets in the same order across their respective streams of paginated responses. Caller
        /// must have READ permission for the queried datasets.</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchAnnotationSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchAnnotationSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchAnnotationSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotationsets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates an annotation set. The update must respect all mutability restrictions and other invariants
        /// described on the annotation set resource. Caller must have WRITE permission for the associated
        /// dataset.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="annotationSetId">The ID of the annotation set to be updated.</param>
        public virtual UpdateRequest Update(Google.Apis.Genomics.v1.Data.AnnotationSet body, string annotationSetId)
        {
            return new UpdateRequest(service, body, annotationSetId);
        }

        /// <summary>Updates an annotation set. The update must respect all mutability restrictions and other invariants
        /// described on the annotation set resource. Caller must have WRITE permission for the associated
        /// dataset.</summary>
        public class UpdateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.AnnotationSet>
        {
            /// <summary>Constructs a new Update request.</summary>
            public UpdateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.AnnotationSet body, string annotationSetId)
                : base(service)
            {
                AnnotationSetId = annotationSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the annotation set to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("annotationSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string AnnotationSetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. Mutable fields are name, source_uri, and
            /// info. If unspecified, all mutable fields will be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.AnnotationSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "update"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PUT"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/annotationsets/{annotationSetId}"; }
            }

            /// <summary>Initializes Update parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "annotationSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "annotationSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "callsets" collection of methods.</summary>
    public class CallsetsResource
    {
        private const string Resource = "callsets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public CallsetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new call set.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.CallSet body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new call set.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.CallSet>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.CallSet body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.CallSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a call set.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="callSetId">The ID of the call set to be deleted.</param>
        public virtual DeleteRequest Delete(string callSetId)
        {
            return new DeleteRequest(service, callSetId);
        }

        /// <summary>Deletes a call set.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string callSetId)
                : base(service)
            {
                CallSetId = callSetId;
                InitParameters();
            }


            /// <summary>The ID of the call set to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("callSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CallSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/{callSetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "callSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "callSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a call set by ID.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="callSetId">The ID of the call set.</param>
        public virtual GetRequest Get(string callSetId)
        {
            return new GetRequest(service, callSetId);
        }

        /// <summary>Gets a call set by ID.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.CallSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string callSetId)
                : base(service)
            {
                CallSetId = callSetId;
                InitParameters();
            }


            /// <summary>The ID of the call set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("callSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CallSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/{callSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "callSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "callSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a call set.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="callSetId">The ID of the call set to be updated.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.CallSet body, string callSetId)
        {
            return new PatchRequest(service, body, callSetId);
        }

        /// <summary>Updates a call set.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.CallSet>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.CallSet body, string callSetId)
                : base(service)
            {
                CallSetId = callSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the call set to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("callSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string CallSetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. At this time, the only mutable field is
            /// name. The only acceptable value is "name". If unspecified, all mutable fields will be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.CallSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/{callSetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "callSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "callSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a list of call sets matching the criteria.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resource
        /// s/avro/variantmethods.avdl#L178).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchCallSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Gets a list of call sets matching the criteria.
        ///
        /// For the definitions of call sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchCallSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resource
        /// s/avro/variantmethods.avdl#L178).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchCallSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchCallSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchCallSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/callsets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "datasets" collection of methods.</summary>
    public class DatasetsResource
    {
        private const string Resource = "datasets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public DatasetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new dataset.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.Dataset body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new dataset.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Dataset body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Dataset Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a dataset and all of its contents (all read group sets, reference sets, variant sets, call
        /// sets, annotation sets, etc.) This is reversible (up to one week after the deletion) via the
        /// datasets.undelete operation.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="datasetId">The ID of the dataset to be deleted.</param>
        public virtual DeleteRequest Delete(string datasetId)
        {
            return new DeleteRequest(service, datasetId);
        }

        /// <summary>Deletes a dataset and all of its contents (all read group sets, reference sets, variant sets, call
        /// sets, annotation sets, etc.) This is reversible (up to one week after the deletion) via the
        /// datasets.undelete operation.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                InitParameters();
            }


            /// <summary>The ID of the dataset to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a dataset by ID.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="datasetId">The ID of the dataset.</param>
        public virtual GetRequest Get(string datasetId)
        {
            return new GetRequest(service, datasetId);
        }

        /// <summary>Gets a dataset by ID.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                InitParameters();
            }


            /// <summary>The ID of the dataset.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets the access control policy for the dataset. This is empty if the policy or resource does not
        /// exist.
        ///
        /// See Getting a Policy for more information.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which policy is being specified. Format is
        /// `datasets/`.</param>
        public virtual GetIamPolicyRequest GetIamPolicy(Google.Apis.Genomics.v1.Data.GetIamPolicyRequest body, string resource)
        {
            return new GetIamPolicyRequest(service, body, resource);
        }

        /// <summary>Gets the access control policy for the dataset. This is empty if the policy or resource does not
        /// exist.
        ///
        /// See Getting a Policy for more information.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class GetIamPolicyRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Policy>
        {
            /// <summary>Constructs a new GetIamPolicy request.</summary>
            public GetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.GetIamPolicyRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which policy is being specified. Format is `datasets/`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.GetIamPolicyRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "getIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+resource}:getIamPolicy"; }
            }

            /// <summary>Initializes GetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^datasets/[^/]+$",
                    });
            }

        }

        /// <summary>Lists datasets within a project.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public virtual ListRequest List()
        {
            return new ListRequest(service);
        }

        /// <summary>Lists datasets within a project.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListDatasetsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service)
                : base(service)
            {
                InitParameters();
            }


            /// <summary>The continuation token, which is used to page through large result sets. To get the next page
            /// of results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 50. The
            /// maximum value is 1024.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>Required. The Google Cloud project ID to list datasets for.</summary>
            [Google.Apis.Util.RequestParameterAttribute("projectId", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string ProjectId { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageSize", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageSize",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "projectId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "projectId",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a dataset.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="datasetId">The ID of the dataset to be updated.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.Dataset body, string datasetId)
        {
            return new PatchRequest(service, body, datasetId);
        }

        /// <summary>Updates a dataset.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Dataset body, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the dataset to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. At this time, the only mutable field is
            /// name. The only acceptable value is "name". If unspecified, all mutable fields will be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Dataset Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Sets the access control policy on the specified dataset. Replaces any existing policy.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// See Setting a Policy for more information.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which policy is being specified. Format is
        /// `datasets/`.</param>
        public virtual SetIamPolicyRequest SetIamPolicy(Google.Apis.Genomics.v1.Data.SetIamPolicyRequest body, string resource)
        {
            return new SetIamPolicyRequest(service, body, resource);
        }

        /// <summary>Sets the access control policy on the specified dataset. Replaces any existing policy.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// See Setting a Policy for more information.</summary>
        public class SetIamPolicyRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Policy>
        {
            /// <summary>Constructs a new SetIamPolicy request.</summary>
            public SetIamPolicyRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SetIamPolicyRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which policy is being specified. Format is `datasets/`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SetIamPolicyRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "setIamPolicy"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+resource}:setIamPolicy"; }
            }

            /// <summary>Initializes SetIamPolicy parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^datasets/[^/]+$",
                    });
            }

        }

        /// <summary>Returns permissions that a caller has on the specified resource. See Testing Permissions for more
        /// information.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="resource">REQUIRED: The resource for which policy is being specified. Format is
        /// `datasets/`.</param>
        public virtual TestIamPermissionsRequest TestIamPermissions(Google.Apis.Genomics.v1.Data.TestIamPermissionsRequest body, string resource)
        {
            return new TestIamPermissionsRequest(service, body, resource);
        }

        /// <summary>Returns permissions that a caller has on the specified resource. See Testing Permissions for more
        /// information.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class TestIamPermissionsRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.TestIamPermissionsResponse>
        {
            /// <summary>Constructs a new TestIamPermissions request.</summary>
            public TestIamPermissionsRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.TestIamPermissionsRequest body, string resource)
                : base(service)
            {
                Resource = resource;
                Body = body;
                InitParameters();
            }


            /// <summary>REQUIRED: The resource for which policy is being specified. Format is `datasets/`.</summary>
            [Google.Apis.Util.RequestParameterAttribute("resource", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Resource { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.TestIamPermissionsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "testIamPermissions"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+resource}:testIamPermissions"; }
            }

            /// <summary>Initializes TestIamPermissions parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "resource", new Google.Apis.Discovery.Parameter
                    {
                        Name = "resource",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^datasets/[^/]+$",
                    });
            }

        }

        /// <summary>Undeletes a dataset by restoring a dataset which was deleted via this API.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This operation is only possible for a week after the deletion occurred.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="datasetId">The ID of the dataset to be undeleted.</param>
        public virtual UndeleteRequest Undelete(Google.Apis.Genomics.v1.Data.UndeleteDatasetRequest body, string datasetId)
        {
            return new UndeleteRequest(service, body, datasetId);
        }

        /// <summary>Undeletes a dataset by restoring a dataset which was deleted via this API.
        ///
        /// For the definitions of datasets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This operation is only possible for a week after the deletion occurred.</summary>
        public class UndeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Dataset>
        {
            /// <summary>Constructs a new Undelete request.</summary>
            public UndeleteRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.UndeleteDatasetRequest body, string datasetId)
                : base(service)
            {
                DatasetId = datasetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the dataset to be undeleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("datasetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string DatasetId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.UndeleteDatasetRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "undelete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/datasets/{datasetId}:undelete"; }
            }

            /// <summary>Initializes Undelete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "datasetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "datasetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "operations" collection of methods.</summary>
    public class OperationsResource
    {
        private const string Resource = "operations";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public OperationsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
        /// cancel the operation, but success is not guaranteed. Clients may use Operations.GetOperation or
        /// Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite
        /// cancellation.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="name">The name of the operation resource to be cancelled.</param>
        public virtual CancelRequest Cancel(Google.Apis.Genomics.v1.Data.CancelOperationRequest body, string name)
        {
            return new CancelRequest(service, body, name);
        }

        /// <summary>Starts asynchronous cancellation on a long-running operation. The server makes a best effort to
        /// cancel the operation, but success is not guaranteed. Clients may use Operations.GetOperation or
        /// Operations.ListOperations to check whether the cancellation succeeded or the operation completed despite
        /// cancellation.</summary>
        public class CancelRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Cancel request.</summary>
            public CancelRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.CancelOperationRequest body, string name)
                : base(service)
            {
                Name = name;
                Body = body;
                InitParameters();
            }


            /// <summary>The name of the operation resource to be cancelled.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Name { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.CancelOperationRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "cancel"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+name}:cancel"; }
            }

            /// <summary>Initializes Cancel parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^operations/.+$",
                    });
            }

        }

        /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
        /// operation result at intervals as recommended by the API service.</summary>
        /// <param name="name">The name of the operation resource.</param>
        public virtual GetRequest Get(string name)
        {
            return new GetRequest(service, name);
        }

        /// <summary>Gets the latest state of a long-running operation.  Clients can use this method to poll the
        /// operation result at intervals as recommended by the API service.</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string name)
                : base(service)
            {
                Name = name;
                InitParameters();
            }


            /// <summary>The name of the operation resource.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Name { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+name}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^operations/.+$",
                    });
            }

        }

        /// <summary>Lists operations that match the specified filter in the request.</summary>
        /// <param name="name">The name of the operation collection.</param>
        public virtual ListRequest List(string name)
        {
            return new ListRequest(service, name);
        }

        /// <summary>Lists operations that match the specified filter in the request.</summary>
        public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListOperationsResponse>
        {
            /// <summary>Constructs a new List request.</summary>
            public ListRequest(Google.Apis.Services.IClientService service, string name)
                : base(service)
            {
                Name = name;
                InitParameters();
            }


            /// <summary>The name of the operation collection.</summary>
            [Google.Apis.Util.RequestParameterAttribute("name", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string Name { get; private set; }

            /// <summary>The standard list page token.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string PageToken { get; set; }

            /// <summary>The maximum number of results to return. If unspecified, defaults to 256. The maximum value is
            /// 2048.</summary>
            [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
            public virtual System.Nullable<int> PageSize { get; set; }

            /// <summary>A string for filtering Operations. The following filter fields are supported
            ///
            /// * projectId Required. Corresponds to OperationMetadata.projectId. * createTime The time this job was
            /// created, in seconds from the [epoch](http://en.wikipedia.org/wiki/Unix_time). Can use `>=` and/or `<=`
            /// operators. * status Can be `RUNNING`, `SUCCESS`, `FAILURE`, or `CANCELED`. Only one status may be
            /// specified. * labels.key where key is a label key.
            ///
            /// Examples
            ///
            /// * `projectId = my-project AND createTime >= 1432140000` * `projectId = my-project AND createTime >=
            /// 1432140000 AND createTime <= 1432150000 AND status = RUNNING` * `projectId = my-project AND labels.color
            /// = *` * `projectId = my-project AND labels.color = red`</summary>
            [Google.Apis.Util.RequestParameterAttribute("filter", Google.Apis.Util.RequestParameterType.Query)]
            public virtual string Filter { get; set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "list"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/{+name}"; }
            }

            /// <summary>Initializes List parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "name", new Google.Apis.Discovery.Parameter
                    {
                        Name = "name",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = @"^operations$",
                    });
                RequestParameters.Add(
                    "pageToken", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageToken",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "pageSize", new Google.Apis.Discovery.Parameter
                    {
                        Name = "pageSize",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "filter", new Google.Apis.Discovery.Parameter
                    {
                        Name = "filter",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }
    }

    /// <summary>The "readgroupsets" collection of methods.</summary>
    public class ReadgroupsetsResource
    {
        private const string Resource = "readgroupsets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ReadgroupsetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            coveragebuckets = new CoveragebucketsResource(service);

        }

        private readonly CoveragebucketsResource coveragebuckets;

        /// <summary>Gets the Coveragebuckets resource.</summary>
        public virtual CoveragebucketsResource Coveragebuckets
        {
            get { return coveragebuckets; }
        }

        /// <summary>The "coveragebuckets" collection of methods.</summary>
        public class CoveragebucketsResource
        {
            private const string Resource = "coveragebuckets";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public CoveragebucketsResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Lists fixed width coverage buckets for a read group set, each of which correspond to a range of
            /// a reference sequence. Each bucket summarizes coverage information across its corresponding genomic
            /// range.
            ///
            /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
            ///
            /// Coverage is defined as the number of reads which are aligned to a given base in the reference sequence.
            /// Coverage buckets are available at several precomputed bucket widths, enabling retrieval of various
            /// coverage 'zoom levels'. The caller must have READ permissions for the target read group set.</summary>
            /// <param name="readGroupSetId">Required. The ID of the read group set over which coverage is requested.</param>
            public virtual ListRequest List(string readGroupSetId)
            {
                return new ListRequest(service, readGroupSetId);
            }

            /// <summary>Lists fixed width coverage buckets for a read group set, each of which correspond to a range of
            /// a reference sequence. Each bucket summarizes coverage information across its corresponding genomic
            /// range.
            ///
            /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
            ///
            /// Coverage is defined as the number of reads which are aligned to a given base in the reference sequence.
            /// Coverage buckets are available at several precomputed bucket widths, enabling retrieval of various
            /// coverage 'zoom levels'. The caller must have READ permissions for the target read group set.</summary>
            public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListCoverageBucketsResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string readGroupSetId)
                    : base(service)
                {
                    ReadGroupSetId = readGroupSetId;
                    InitParameters();
                }


                /// <summary>Required. The ID of the read group set over which coverage is requested.</summary>
                [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ReadGroupSetId { get; private set; }

                /// <summary>The start position of the range on the reference, 0-based inclusive. If specified,
                /// `referenceName` must also be specified. Defaults to 0.</summary>
                [Google.Apis.Util.RequestParameterAttribute("start", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> Start { get; set; }

                /// <summary>The desired width of each reported coverage bucket in base pairs. This will be rounded down
                /// to the nearest precomputed bucket width; the value of which is returned as `bucketWidth` in the
                /// response. Defaults to infinity (each bucket spans an entire reference sequence) or the length of the
                /// target range, if specified. The smallest precomputed `bucketWidth` is currently 2048 base pairs;
                /// this is subject to change.</summary>
                [Google.Apis.Util.RequestParameterAttribute("targetBucketWidth", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> TargetBucketWidth { get; set; }

                /// <summary>The name of the reference to query, within the reference set associated with this query.
                /// Optional.</summary>
                [Google.Apis.Util.RequestParameterAttribute("referenceName", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string ReferenceName { get; set; }

                /// <summary>The end position of the range on the reference, 0-based exclusive. If specified,
                /// `referenceName` must also be specified. If unset or 0, defaults to the length of the
                /// reference.</summary>
                [Google.Apis.Util.RequestParameterAttribute("end", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> End { get; set; }

                /// <summary>The continuation token, which is used to page through large result sets. To get the next
                /// page of results, set this parameter to the value of `nextPageToken` from the previous
                /// response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 1024.
                /// The maximum value is 2048.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/readgroupsets/{readGroupSetId}/coveragebuckets"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "readGroupSetId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "readGroupSetId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "start", new Google.Apis.Discovery.Parameter
                        {
                            Name = "start",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "targetBucketWidth", new Google.Apis.Discovery.Parameter
                        {
                            Name = "targetBucketWidth",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "referenceName", new Google.Apis.Discovery.Parameter
                        {
                            Name = "referenceName",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "end", new Google.Apis.Discovery.Parameter
                        {
                            Name = "end",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Deletes a read group set.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="readGroupSetId">The ID of the read group set to be deleted. The caller must have WRITE permissions to
        /// the dataset associated with this read group set.</param>
        public virtual DeleteRequest Delete(string readGroupSetId)
        {
            return new DeleteRequest(service, readGroupSetId);
        }

        /// <summary>Deletes a read group set.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                InitParameters();
            }


            /// <summary>The ID of the read group set to be deleted. The caller must have WRITE permissions to the
            /// dataset associated with this read group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Exports a read group set to a BAM file in Google Cloud Storage.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Note that currently there may be some differences between exported BAM files and the original BAM file at
        /// the time of import. See ImportReadGroupSets for caveats.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="readGroupSetId">Required. The ID of the read group set to export. The caller must have READ access to
        /// this read group set.</param>
        public virtual ExportRequest Export(Google.Apis.Genomics.v1.Data.ExportReadGroupSetRequest body, string readGroupSetId)
        {
            return new ExportRequest(service, body, readGroupSetId);
        }

        /// <summary>Exports a read group set to a BAM file in Google Cloud Storage.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Note that currently there may be some differences between exported BAM files and the original BAM file at
        /// the time of import. See ImportReadGroupSets for caveats.</summary>
        public class ExportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Export request.</summary>
            public ExportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ExportReadGroupSetRequest body, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>Required. The ID of the read group set to export. The caller must have READ access to this read
            /// group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ExportReadGroupSetRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "export"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}:export"; }
            }

            /// <summary>Initializes Export parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a read group set by ID.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="readGroupSetId">The ID of the read group set.</param>
        public virtual GetRequest Get(string readGroupSetId)
        {
            return new GetRequest(service, readGroupSetId);
        }

        /// <summary>Gets a read group set by ID.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ReadGroupSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                InitParameters();
            }


            /// <summary>The ID of the read group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Creates read group sets by asynchronously importing the provided information.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// The caller must have WRITE permissions to the dataset.
        ///
        /// ## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import
        ///
        /// - Tags will be converted to strings - tag types are not preserved - Comments (`@CO`) in the input file
        /// header will not be preserved - Original header order of references (`@SQ`) will not be preserved - Any
        /// reverse stranded unmapped reads will be reverse complemented, and their qualities (also the "BQ" and "OQ"
        /// tags, if any) will be reversed - Unmapped reads will be stripped of positional information (reference name
        /// and position)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual ImportRequest Import(Google.Apis.Genomics.v1.Data.ImportReadGroupSetsRequest body)
        {
            return new ImportRequest(service, body);
        }

        /// <summary>Creates read group sets by asynchronously importing the provided information.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// The caller must have WRITE permissions to the dataset.
        ///
        /// ## Notes on [BAM](https://samtools.github.io/hts-specs/SAMv1.pdf) import
        ///
        /// - Tags will be converted to strings - tag types are not preserved - Comments (`@CO`) in the input file
        /// header will not be preserved - Original header order of references (`@SQ`) will not be preserved - Any
        /// reverse stranded unmapped reads will be reverse complemented, and their qualities (also the "BQ" and "OQ"
        /// tags, if any) will be reversed - Unmapped reads will be stripped of positional information (reference name
        /// and position)</summary>
        public class ImportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Import request.</summary>
            public ImportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ImportReadGroupSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ImportReadGroupSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "import"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets:import"; }
            }

            /// <summary>Initializes Import parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates a read group set.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="readGroupSetId">The ID of the read group set to be updated. The caller must have WRITE permissions to
        /// the dataset associated with this read group set.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.ReadGroupSet body, string readGroupSetId)
        {
            return new PatchRequest(service, body, readGroupSetId);
        }

        /// <summary>Updates a read group set.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ReadGroupSet>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ReadGroupSet body, string readGroupSetId)
                : base(service)
            {
                ReadGroupSetId = readGroupSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the read group set to be updated. The caller must have WRITE permissions to the
            /// dataset associated with this read group set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("readGroupSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReadGroupSetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. Supported fields:
            ///
            /// * name. * referenceSetId.
            ///
            /// Leaving `updateMask` unset is equivalent to specifying all mutable fields.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ReadGroupSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/{readGroupSetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "readGroupSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "readGroupSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for read group sets matching the criteria.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/res
        /// ources/avro/readmethods.avdl#L135).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReadGroupSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for read group sets matching the criteria.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchReadGroupSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/res
        /// ources/avro/readmethods.avdl#L135).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReadGroupSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReadGroupSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReadGroupSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/readgroupsets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "reads" collection of methods.</summary>
    public class ReadsResource
    {
        private const string Resource = "reads";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ReadsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets a list of reads for one or more read group sets.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Reads search operates over a genomic coordinate space of reference sequence & position defined over the
        /// reference sequences to which the requested read group sets are aligned.
        ///
        /// If a target positional range is specified, search returns all reads whose alignment to the reference genome
        /// overlap the range. A query which specifies only read group set IDs yields all reads in those read group
        /// sets, including unmapped reads.
        ///
        /// All reads returned (including reads on subsequent pages) are ordered by genomic coordinate (by reference
        /// sequence, then position). Reads with equivalent genomic coordinates are returned in an unspecified order.
        /// This order is consistent, such that two queries for the same content (regardless of page size) yield reads
        /// in the same order across their respective streams of paginated responses.
        ///
        /// Implements [GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/a
        /// vro/readmethods.avdl#L85).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReadsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Gets a list of reads for one or more read group sets.
        ///
        /// For the definitions of read group sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Reads search operates over a genomic coordinate space of reference sequence & position defined over the
        /// reference sequences to which the requested read group sets are aligned.
        ///
        /// If a target positional range is specified, search returns all reads whose alignment to the reference genome
        /// overlap the range. A query which specifies only read group set IDs yields all reads in those read group
        /// sets, including unmapped reads.
        ///
        /// All reads returned (including reads on subsequent pages) are ordered by genomic coordinate (by reference
        /// sequence, then position). Reads with equivalent genomic coordinates are returned in an unspecified order.
        /// This order is consistent, such that two queries for the same content (regardless of page size) yield reads
        /// in the same order across their respective streams of paginated responses.
        ///
        /// Implements [GlobalAllianceApi.searchReads](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/a
        /// vro/readmethods.avdl#L85).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReadsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReadsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReadsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/reads/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "references" collection of methods.</summary>
    public class ReferencesResource
    {
        private const string Resource = "references";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ReferencesResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;
            bases = new BasesResource(service);

        }

        private readonly BasesResource bases;

        /// <summary>Gets the Bases resource.</summary>
        public virtual BasesResource Bases
        {
            get { return bases; }
        }

        /// <summary>The "bases" collection of methods.</summary>
        public class BasesResource
        {
            private const string Resource = "bases";

            /// <summary>The service which this resource belongs to.</summary>
            private readonly Google.Apis.Services.IClientService service;

            /// <summary>Constructs a new resource.</summary>
            public BasesResource(Google.Apis.Services.IClientService service)
            {
                this.service = service;

            }


            /// <summary>Lists the bases in a reference, optionally restricted to a range.
            ///
            /// For the definitions of references and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
            ///
            /// Implements [GlobalAllianceApi.getReferenceBases](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/r
            /// esources/avro/referencemethods.avdl#L221).</summary>
            /// <param name="referenceId">The ID of the reference.</param>
            public virtual ListRequest List(string referenceId)
            {
                return new ListRequest(service, referenceId);
            }

            /// <summary>Lists the bases in a reference, optionally restricted to a range.
            ///
            /// For the definitions of references and other genomics resources, see [Fundamentals of Google
            /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
            ///
            /// Implements [GlobalAllianceApi.getReferenceBases](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/r
            /// esources/avro/referencemethods.avdl#L221).</summary>
            public class ListRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ListBasesResponse>
            {
                /// <summary>Constructs a new List request.</summary>
                public ListRequest(Google.Apis.Services.IClientService service, string referenceId)
                    : base(service)
                {
                    ReferenceId = referenceId;
                    InitParameters();
                }


                /// <summary>The ID of the reference.</summary>
                [Google.Apis.Util.RequestParameterAttribute("referenceId", Google.Apis.Util.RequestParameterType.Path)]
                public virtual string ReferenceId { get; private set; }

                /// <summary>The continuation token, which is used to page through large result sets. To get the next
                /// page of results, set this parameter to the value of `nextPageToken` from the previous
                /// response.</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageToken", Google.Apis.Util.RequestParameterType.Query)]
                public virtual string PageToken { get; set; }

                /// <summary>The maximum number of bases to return in a single page. If unspecified, defaults to 200Kbp
                /// (kilo base pairs). The maximum value is 10Mbp (mega base pairs).</summary>
                [Google.Apis.Util.RequestParameterAttribute("pageSize", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<int> PageSize { get; set; }

                /// <summary>The start position (0-based) of this query. Defaults to 0.</summary>
                [Google.Apis.Util.RequestParameterAttribute("start", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> Start { get; set; }

                /// <summary>The end position (0-based, exclusive) of this query. Defaults to the length of this
                /// reference.</summary>
                [Google.Apis.Util.RequestParameterAttribute("end", Google.Apis.Util.RequestParameterType.Query)]
                public virtual System.Nullable<long> End { get; set; }


                ///<summary>Gets the method name.</summary>
                public override string MethodName
                {
                    get { return "list"; }
                }

                ///<summary>Gets the HTTP method.</summary>
                public override string HttpMethod
                {
                    get { return "GET"; }
                }

                ///<summary>Gets the REST path.</summary>
                public override string RestPath
                {
                    get { return "v1/references/{referenceId}/bases"; }
                }

                /// <summary>Initializes List parameter list.</summary>
                protected override void InitParameters()
                {
                    base.InitParameters();

                    RequestParameters.Add(
                        "referenceId", new Google.Apis.Discovery.Parameter
                        {
                            Name = "referenceId",
                            IsRequired = true,
                            ParameterType = "path",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageToken", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageToken",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "pageSize", new Google.Apis.Discovery.Parameter
                        {
                            Name = "pageSize",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "start", new Google.Apis.Discovery.Parameter
                        {
                            Name = "start",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                    RequestParameters.Add(
                        "end", new Google.Apis.Discovery.Parameter
                        {
                            Name = "end",
                            IsRequired = false,
                            ParameterType = "query",
                            DefaultValue = null,
                            Pattern = null,
                        });
                }

            }
        }

        /// <summary>Gets a reference.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/
        /// avro/referencemethods.avdl#L158).</summary>
        /// <param name="referenceId">The ID of the reference.</param>
        public virtual GetRequest Get(string referenceId)
        {
            return new GetRequest(service, referenceId);
        }

        /// <summary>Gets a reference.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.getReference](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/
        /// avro/referencemethods.avdl#L158).</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Reference>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string referenceId)
                : base(service)
            {
                ReferenceId = referenceId;
                InitParameters();
            }


            /// <summary>The ID of the reference.</summary>
            [Google.Apis.Util.RequestParameterAttribute("referenceId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReferenceId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/references/{referenceId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "referenceId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "referenceId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for references which match the given criteria.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resour
        /// ces/avro/referencemethods.avdl#L146).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReferencesRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for references which match the given criteria.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchReferences](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resour
        /// ces/avro/referencemethods.avdl#L146).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReferencesResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReferencesRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReferencesRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/references/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "referencesets" collection of methods.</summary>
    public class ReferencesetsResource
    {
        private const string Resource = "referencesets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public ReferencesetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Gets a reference set.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resourc
        /// es/avro/referencemethods.avdl#L83).</summary>
        /// <param name="referenceSetId">The ID of the reference set.</param>
        public virtual GetRequest Get(string referenceSetId)
        {
            return new GetRequest(service, referenceSetId);
        }

        /// <summary>Gets a reference set.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.getReferenceSet](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resourc
        /// es/avro/referencemethods.avdl#L83).</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.ReferenceSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string referenceSetId)
                : base(service)
            {
                ReferenceSetId = referenceSetId;
                InitParameters();
            }


            /// <summary>The ID of the reference set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("referenceSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string ReferenceSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/referencesets/{referenceSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "referenceSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "referenceSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Searches for reference sets which match the given criteria.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchReferenceSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/res
        /// ources/avro/referencemethods.avdl#L71)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchReferenceSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Searches for reference sets which match the given criteria.
        ///
        /// For the definitions of references and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchReferenceSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/res
        /// ources/avro/referencemethods.avdl#L71)</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchReferenceSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchReferenceSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchReferenceSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/referencesets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "variants" collection of methods.</summary>
    public class VariantsResource
    {
        private const string Resource = "variants";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public VariantsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new variant.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.Variant body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new variant.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Variant>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Variant body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Variant Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a variant.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="variantId">The ID of the variant to be deleted.</param>
        public virtual DeleteRequest Delete(string variantId)
        {
            return new DeleteRequest(service, variantId);
        }

        /// <summary>Deletes a variant.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string variantId)
                : base(service)
            {
                VariantId = variantId;
                InitParameters();
            }


            /// <summary>The ID of the variant to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/{variantId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a variant by ID.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="variantId">The ID of the variant.</param>
        public virtual GetRequest Get(string variantId)
        {
            return new GetRequest(service, variantId);
        }

        /// <summary>Gets a variant by ID.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Variant>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string variantId)
                : base(service)
            {
                VariantId = variantId;
                InitParameters();
            }


            /// <summary>The ID of the variant.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/{variantId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Creates variant data by asynchronously importing the provided information.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// The variants for import will be merged with any existing variant that matches its reference sequence, start,
        /// end, reference bases, and alternative bases. If no such variant exists, a new one will be created.
        ///
        /// When variants are merged, the call information from the new variant is added to the existing variant, and
        /// Variant info fields are merged as specified in infoMergeConfig. As a special case, for single-sample VCF
        /// files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-
        /// specific context. Imported VCF headers are appended to the metadata already in a variant set.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual ImportRequest Import(Google.Apis.Genomics.v1.Data.ImportVariantsRequest body)
        {
            return new ImportRequest(service, body);
        }

        /// <summary>Creates variant data by asynchronously importing the provided information.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// The variants for import will be merged with any existing variant that matches its reference sequence, start,
        /// end, reference bases, and alternative bases. If no such variant exists, a new one will be created.
        ///
        /// When variants are merged, the call information from the new variant is added to the existing variant, and
        /// Variant info fields are merged as specified in infoMergeConfig. As a special case, for single-sample VCF
        /// files, QUAL and FILTER fields will be moved to the call level; these are sometimes interpreted in a call-
        /// specific context. Imported VCF headers are appended to the metadata already in a variant set.</summary>
        public class ImportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Import request.</summary>
            public ImportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ImportVariantsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ImportVariantsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "import"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants:import"; }
            }

            /// <summary>Initializes Import parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Merges the given variants with existing variants.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Each variant will be merged with an existing variant that matches its reference sequence, start, end,
        /// reference bases, and alternative bases. If no such variant exists, a new one will be created.
        ///
        /// When variants are merged, the call information from the new variant is added to the existing variant.
        /// Variant info fields are merged as specified in the infoMergeConfig field of the MergeVariantsRequest.
        ///
        /// Please exercise caution when using this method!  It is easy to introduce mistakes in existing variants and
        /// difficult to back out of them.  For example, suppose you were trying to merge a new variant with an existing
        /// one and both variants contain calls that belong to callsets with the same callset ID.
        ///
        /// // Existing variant - irrelevant fields trimmed for clarity { "variantSetId": "10473108253681171589",
        /// "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ {
        /// "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 0, 1 ], } ] }
        ///
        /// // New variant with conflicting call information { "variantSetId": "10473108253681171589", "referenceName":
        /// "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId":
        /// "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 1, 1 ], } ] }
        ///
        /// The resulting merged variant would overwrite the existing calls with those from the new variant:
        ///
        /// { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G",
        /// "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0",
        /// "genotype": [ 1, 1 ], } ] }
        ///
        /// This may be the desired outcome, but it is up to the user to determine if if that is indeed the
        /// case.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual MergeRequest Merge(Google.Apis.Genomics.v1.Data.MergeVariantsRequest body)
        {
            return new MergeRequest(service, body);
        }

        /// <summary>Merges the given variants with existing variants.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Each variant will be merged with an existing variant that matches its reference sequence, start, end,
        /// reference bases, and alternative bases. If no such variant exists, a new one will be created.
        ///
        /// When variants are merged, the call information from the new variant is added to the existing variant.
        /// Variant info fields are merged as specified in the infoMergeConfig field of the MergeVariantsRequest.
        ///
        /// Please exercise caution when using this method!  It is easy to introduce mistakes in existing variants and
        /// difficult to back out of them.  For example, suppose you were trying to merge a new variant with an existing
        /// one and both variants contain calls that belong to callsets with the same callset ID.
        ///
        /// // Existing variant - irrelevant fields trimmed for clarity { "variantSetId": "10473108253681171589",
        /// "referenceName": "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ {
        /// "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 0, 1 ], } ] }
        ///
        /// // New variant with conflicting call information { "variantSetId": "10473108253681171589", "referenceName":
        /// "1", "start": "10582", "referenceBases": "G", "alternateBases": [ "A" ], "calls": [ { "callSetId":
        /// "10473108253681171589-0", "callSetName": "CALLSET0", "genotype": [ 1, 1 ], } ] }
        ///
        /// The resulting merged variant would overwrite the existing calls with those from the new variant:
        ///
        /// { "variantSetId": "10473108253681171589", "referenceName": "1", "start": "10582", "referenceBases": "G",
        /// "alternateBases": [ "A" ], "calls": [ { "callSetId": "10473108253681171589-0", "callSetName": "CALLSET0",
        /// "genotype": [ 1, 1 ], } ] }
        ///
        /// This may be the desired outcome, but it is up to the user to determine if if that is indeed the
        /// case.</summary>
        public class MergeRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Merge request.</summary>
            public MergeRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.MergeVariantsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.MergeVariantsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "merge"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants:merge"; }
            }

            /// <summary>Initializes Merge parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Updates a variant.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics. Returns the modified variant without its calls.</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="variantId">The ID of the variant to be updated.</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.Variant body, string variantId)
        {
            return new PatchRequest(service, body, variantId);
        }

        /// <summary>Updates a variant.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// This method supports patch semantics. Returns the modified variant without its calls.</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Variant>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.Variant body, string variantId)
                : base(service)
            {
                VariantId = variantId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the variant to be updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. At this time, mutable fields are names and
            /// info. Acceptable values are "names" and "info". If unspecified, all mutable fields will be
            /// updated.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.Variant Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/{variantId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a list of variants matching the criteria.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resource
        /// s/avro/variantmethods.avdl#L126).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchVariantsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Gets a list of variants matching the criteria.
        ///
        /// For the definitions of variants and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchVariants](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resource
        /// s/avro/variantmethods.avdl#L126).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchVariantsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchVariantsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchVariantsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variants/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }

    /// <summary>The "variantsets" collection of methods.</summary>
    public class VariantsetsResource
    {
        private const string Resource = "variantsets";

        /// <summary>The service which this resource belongs to.</summary>
        private readonly Google.Apis.Services.IClientService service;

        /// <summary>Constructs a new resource.</summary>
        public VariantsetsResource(Google.Apis.Services.IClientService service)
        {
            this.service = service;

        }


        /// <summary>Creates a new variant set.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// The provided variant set must have a valid `datasetId` set - all other fields are optional. Note that the
        /// `id` field will be ignored, as this is assigned by the server.</summary>
        /// <param name="body">The body of the request.</param>
        public virtual CreateRequest Create(Google.Apis.Genomics.v1.Data.VariantSet body)
        {
            return new CreateRequest(service, body);
        }

        /// <summary>Creates a new variant set.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// The provided variant set must have a valid `datasetId` set - all other fields are optional. Note that the
        /// `id` field will be ignored, as this is assigned by the server.</summary>
        public class CreateRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.VariantSet>
        {
            /// <summary>Constructs a new Create request.</summary>
            public CreateRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.VariantSet body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.VariantSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "create"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets"; }
            }

            /// <summary>Initializes Create parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }

        /// <summary>Deletes a variant set including all variants, call sets, and calls within. This is not reversible.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="variantSetId">The ID of the variant set to be deleted.</param>
        public virtual DeleteRequest Delete(string variantSetId)
        {
            return new DeleteRequest(service, variantSetId);
        }

        /// <summary>Deletes a variant set including all variants, call sets, and calls within. This is not reversible.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class DeleteRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Empty>
        {
            /// <summary>Constructs a new Delete request.</summary>
            public DeleteRequest(Google.Apis.Services.IClientService service, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                InitParameters();
            }


            /// <summary>The ID of the variant set to be deleted.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "delete"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "DELETE"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}"; }
            }

            /// <summary>Initializes Delete parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Exports variant set data to an external destination.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="variantSetId">Required. The ID of the variant set that contains variant data which should be exported.
        /// The caller must have READ access to this variant set.</param>
        public virtual ExportRequest Export(Google.Apis.Genomics.v1.Data.ExportVariantSetRequest body, string variantSetId)
        {
            return new ExportRequest(service, body, variantSetId);
        }

        /// <summary>Exports variant set data to an external destination.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class ExportRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.Operation>
        {
            /// <summary>Constructs a new Export request.</summary>
            public ExportRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.ExportVariantSetRequest body, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>Required. The ID of the variant set that contains variant data which should be exported. The
            /// caller must have READ access to this variant set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.ExportVariantSetRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "export"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}:export"; }
            }

            /// <summary>Initializes Export parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Gets a variant set by ID.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="variantSetId">Required. The ID of the variant set.</param>
        public virtual GetRequest Get(string variantSetId)
        {
            return new GetRequest(service, variantSetId);
        }

        /// <summary>Gets a variant set by ID.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class GetRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.VariantSet>
        {
            /// <summary>Constructs a new Get request.</summary>
            public GetRequest(Google.Apis.Services.IClientService service, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                InitParameters();
            }


            /// <summary>Required. The ID of the variant set.</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }


            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "get"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "GET"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}"; }
            }

            /// <summary>Initializes Get parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Updates a variant set using patch semantics.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        /// <param name="body">The body of the request.</param>
        /// <param name="variantSetId">The ID of the variant to be updated (must already exist).</param>
        public virtual PatchRequest Patch(Google.Apis.Genomics.v1.Data.VariantSet body, string variantSetId)
        {
            return new PatchRequest(service, body, variantSetId);
        }

        /// <summary>Updates a variant set using patch semantics.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)</summary>
        public class PatchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.VariantSet>
        {
            /// <summary>Constructs a new Patch request.</summary>
            public PatchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.VariantSet body, string variantSetId)
                : base(service)
            {
                VariantSetId = variantSetId;
                Body = body;
                InitParameters();
            }


            /// <summary>The ID of the variant to be updated (must already exist).</summary>
            [Google.Apis.Util.RequestParameterAttribute("variantSetId", Google.Apis.Util.RequestParameterType.Path)]
            public virtual string VariantSetId { get; private set; }

            /// <summary>An optional mask specifying which fields to update. Supported fields:
            ///
            /// * metadata. * name. * description.
            ///
            /// Leaving `updateMask` unset is equivalent to specifying all mutable fields.</summary>
            [Google.Apis.Util.RequestParameterAttribute("updateMask", Google.Apis.Util.RequestParameterType.Query)]
            public virtual object UpdateMask { get; set; }


            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.VariantSet Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "patch"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "PATCH"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/{variantSetId}"; }
            }

            /// <summary>Initializes Patch parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

                RequestParameters.Add(
                    "variantSetId", new Google.Apis.Discovery.Parameter
                    {
                        Name = "variantSetId",
                        IsRequired = true,
                        ParameterType = "path",
                        DefaultValue = null,
                        Pattern = null,
                    });
                RequestParameters.Add(
                    "updateMask", new Google.Apis.Discovery.Parameter
                    {
                        Name = "updateMask",
                        IsRequired = false,
                        ParameterType = "query",
                        DefaultValue = null,
                        Pattern = null,
                    });
            }

        }

        /// <summary>Returns a list of all variant sets matching search criteria.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resou
        /// rces/avro/variantmethods.avdl#L49).</summary>
        /// <param name="body">The body of the request.</param>
        public virtual SearchRequest Search(Google.Apis.Genomics.v1.Data.SearchVariantSetsRequest body)
        {
            return new SearchRequest(service, body);
        }

        /// <summary>Returns a list of all variant sets matching search criteria.
        ///
        /// For the definitions of variant sets and other genomics resources, see [Fundamentals of Google
        /// Genomics](https://cloud.google.com/genomics/fundamentals-of-google-genomics)
        ///
        /// Implements [GlobalAllianceApi.searchVariantSets](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resou
        /// rces/avro/variantmethods.avdl#L49).</summary>
        public class SearchRequest : GenomicsBaseServiceRequest<Google.Apis.Genomics.v1.Data.SearchVariantSetsResponse>
        {
            /// <summary>Constructs a new Search request.</summary>
            public SearchRequest(Google.Apis.Services.IClientService service, Google.Apis.Genomics.v1.Data.SearchVariantSetsRequest body)
                : base(service)
            {
                Body = body;
                InitParameters();
            }



            /// <summary>Gets or sets the body of this request.</summary>
            Google.Apis.Genomics.v1.Data.SearchVariantSetsRequest Body { get; set; }

            ///<summary>Returns the body of the request.</summary>
            protected override object GetBody() { return Body; }

            ///<summary>Gets the method name.</summary>
            public override string MethodName
            {
                get { return "search"; }
            }

            ///<summary>Gets the HTTP method.</summary>
            public override string HttpMethod
            {
                get { return "POST"; }
            }

            ///<summary>Gets the REST path.</summary>
            public override string RestPath
            {
                get { return "v1/variantsets/search"; }
            }

            /// <summary>Initializes Search parameter list.</summary>
            protected override void InitParameters()
            {
                base.InitParameters();

            }

        }
    }
}

namespace Google.Apis.Genomics.v1.Data
{    

    /// <summary>An annotation describes a region of reference genome. The value of an annotation may be one of several
    /// canonical types, supplemented by arbitrary info tags. An annotation is not inherently associated with a specific
    /// sample or individual (though a client could choose to use annotations in this way). Example canonical annotation
    /// types are `GENE` and `VARIANT`.</summary>
    public class Annotation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The annotation set to which this annotation belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("annotationSetId")]
        public virtual string AnnotationSetId { get; set; } 

        /// <summary>The end position of the range on the reference, 0-based exclusive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The server-generated annotation ID, unique across all annotations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read alignment information. This must be of the form map (string key mapping to
        /// a list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The display name of this annotation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ID of the Google Genomics reference associated with this range.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceId")]
        public virtual string ReferenceId { get; set; } 

        /// <summary>The display name corresponding to the reference specified by `referenceId`, for example `chr1`,
        /// `1`, or `chrX`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>Whether this range refers to the reverse strand, as opposed to the forward strand. Note that
        /// regardless of this field, the start/end position of the range always refer to the forward strand.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reverseStrand")]
        public virtual System.Nullable<bool> ReverseStrand { get; set; } 

        /// <summary>The start position of the range on the reference, 0-based inclusive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>A transcript value represents the assertion that a particular region of the reference genome may be
        /// transcribed as RNA. An alternative splicing pattern would be represented as a separate transcript object.
        /// This field is only set for annotations of type `TRANSCRIPT`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("transcript")]
        public virtual Transcript Transcript { get; set; } 

        /// <summary>The data type for this annotation. Must match the containing annotation set's type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>A variant annotation, which describes the effect of a variant on the genome, the coding sequence,
        /// and/or higher level consequences at the organism level e.g. pathogenicity. This field is only set for
        /// annotations of type `VARIANT`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variant")]
        public virtual VariantAnnotation Variant { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An annotation set is a logical grouping of annotations that share consistent type information and
    /// provenance. Examples of annotation sets include 'all genes from refseq', and 'all variant annotations from
    /// ClinVar'.</summary>
    public class AnnotationSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dataset to which this annotation set belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>The server-generated annotation set ID, unique across all annotation sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read alignment information. This must be of the form map (string key mapping to
        /// a list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The display name for this annotation set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ID of the reference set that defines the coordinate space for this set's annotations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>The source URI describing the file from which this annotation set was generated, if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUri")]
        public virtual string SourceUri { get; set; } 

        /// <summary>The type of annotations contained within this set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class BatchCreateAnnotationsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The annotations to be created. At most 4096 can be specified in a single request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("annotations")]
        public virtual System.Collections.Generic.IList<Annotation> Annotations { get; set; } 

        /// <summary>A unique request ID which enables the server to detect duplicated requests. If provided, duplicated
        /// requests will result in the same response; if not provided, duplicated requests may result in duplicated
        /// data. For a given annotation set, callers should not reuse `request_id`s when writing different batches of
        /// annotations - behavior in this case is undefined. A common approach is to use a UUID. For batch jobs where
        /// worker crashes are a possibility, consider using some unique variant of a worker or run ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("requestId")]
        public virtual string RequestId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class BatchCreateAnnotationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The resulting per-annotation entries, ordered consistently with the original request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("entries")]
        public virtual System.Collections.Generic.IList<Entry> Entries { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Associates `members` with a `role`.</summary>
    public class Binding : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Specifies the identities requesting access for a Cloud Platform resource. `members` can have the
        /// following values:
        ///
        /// * `allUsers`: A special identifier that represents anyone who is on the internet; with or without a Google
        /// account.
        ///
        /// * `allAuthenticatedUsers`: A special identifier that represents anyone who is authenticated with a Google
        /// account or a service account.
        ///
        /// * `user:{emailid}`: An email address that represents a specific Google account. For example,
        /// `alice@gmail.com` or `joe@example.com`.
        ///
        /// * `serviceAccount:{emailid}`: An email address that represents a service account. For example, `my-other-
        /// app@appspot.gserviceaccount.com`.
        ///
        /// * `group:{emailid}`: An email address that represents a Google group. For example, `admins@example.com`.
        ///
        /// * `domain:{domain}`: A Google Apps domain name that represents all the users of that domain. For example,
        /// `google.com` or `example.com`.
        ///
        /// </summary>
        [Newtonsoft.Json.JsonPropertyAttribute("members")]
        public virtual System.Collections.Generic.IList<string> Members { get; set; } 

        /// <summary>Role that is assigned to `members`. For example, `roles/viewer`, `roles/editor`, or `roles/owner`.
        /// Required</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("role")]
        public virtual string Role { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A call set is a collection of variant calls, typically for one sample. It belongs to a variant set.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class CallSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The date this call set was created in milliseconds from the epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("created")]
        public virtual System.Nullable<long> Created { get; set; } 

        /// <summary>The server-generated call set ID, unique across all call sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional call set information. This must be of the form map (string key mapping to a
        /// list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The call set name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The sample ID this call set corresponds to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sampleId")]
        public virtual string SampleId { get; set; } 

        /// <summary>The IDs of the variant sets this call set belongs to. This field must have exactly length one, as a
        /// call set belongs to a single variant set. This field is repeated for compatibility with the [GA4GH 0.5.1
        /// API](https://github.com/ga4gh/schemas/blob/v0.5.1/src/main/resources/avro/variants.avdl#L76).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetIds")]
        public virtual System.Collections.Generic.IList<string> VariantSetIds { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The request message for Operations.CancelOperation.</summary>
    public class CancelOperationRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A single CIGAR operation.</summary>
    public class CigarUnit : Google.Apis.Requests.IDirectResponseSchema
    {
        [Newtonsoft.Json.JsonPropertyAttribute("operation")]
        public virtual string Operation { get; set; } 

        /// <summary>The number of genomic bases that the operation runs for. Required.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operationLength")]
        public virtual System.Nullable<long> OperationLength { get; set; } 

        /// <summary>`referenceSequence` is only used at mismatches (`SEQUENCE_MISMATCH`) and deletions (`DELETE`).
        /// Filling this field replaces SAM's MD tag. If the relevant information is not available, this field is
        /// unset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSequence")]
        public virtual string ReferenceSequence { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ClinicalCondition : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The MedGen concept id associated with this gene. Search for these IDs at
        /// http://www.ncbi.nlm.nih.gov/medgen/</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conceptId")]
        public virtual string ConceptId { get; set; } 

        /// <summary>The set of external IDs for this condition.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("externalIds")]
        public virtual System.Collections.Generic.IList<ExternalId> ExternalIds { get; set; } 

        /// <summary>A set of names for the condition.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("names")]
        public virtual System.Collections.Generic.IList<string> Names { get; set; } 

        /// <summary>The OMIM id for this condition. Search for these IDs at http://omim.org/</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("omimId")]
        public virtual string OmimId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class CodingSequence : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end of the coding sequence on this annotation's reference sequence, 0-based exclusive. Note
        /// that this position is relative to the reference start, and *not* the containing annotation start.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The start of the coding sequence on this annotation's reference sequence, 0-based inclusive. Note
        /// that this position is relative to the reference start, and *not* the containing annotation start.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Describes a Compute Engine resource that is being managed by a running pipeline.</summary>
    public class ComputeEngine : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The names of the disks that were created for this pipeline.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("diskNames")]
        public virtual System.Collections.Generic.IList<string> DiskNames { get; set; } 

        /// <summary>The instance on which the operation is running.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instanceName")]
        public virtual string InstanceName { get; set; } 

        /// <summary>The machine type of the instance.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("machineType")]
        public virtual string MachineType { get; set; } 

        /// <summary>The availability zone in which the instance resides.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("zone")]
        public virtual string Zone { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A bucket over which read coverage has been precomputed. A bucket corresponds to a specific range of the
    /// reference sequence.</summary>
    public class CoverageBucket : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The average number of reads which are aligned to each individual reference base in this
        /// bucket.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("meanCoverage")]
        public virtual System.Nullable<float> MeanCoverage { get; set; } 

        /// <summary>The genomic coordinate range spanned by this bucket.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("range")]
        public virtual Range Range { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A Dataset is a collection of genomic data.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class Dataset : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The time this dataset was created, in seconds from the epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>The server-generated dataset ID, unique across all datasets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The dataset name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The Google Cloud project ID that this dataset belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A generic empty message that you can re-use to avoid defining duplicated empty messages in your APIs. A
    /// typical example is to use it as the request or the response type of an API method. For instance:
    ///
    /// service Foo { rpc Bar(google.protobuf.Empty) returns (google.protobuf.Empty); }
    ///
    /// The JSON representation for `Empty` is empty JSON object `{}`.</summary>
    public class Empty : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Entry : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The created annotation, if creation was successful.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("annotation")]
        public virtual Annotation Annotation { get; set; } 

        /// <summary>The creation status.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("status")]
        public virtual Status Status { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Exon : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end position of the exon on this annotation's reference sequence, 0-based exclusive. Note that
        /// this is relative to the reference start, and *not* the containing annotation start.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The frame of this exon. Contains a value of 0, 1, or 2, which indicates the offset of the first
        /// coding base of the exon within the reading frame of the coding DNA sequence, if any. This field is dependent
        /// on the strandedness of this annotation (see Annotation.reverse_strand). For forward stranded annotations,
        /// this offset is relative to the exon.start. For reverse strand annotations, this offset is relative to the
        /// exon.end `- 1`.
        ///
        /// Unset if this exon does not intersect the coding sequence. Upon creation of a transcript, the frame must be
        /// populated for all or none of the coding exons.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("frame")]
        public virtual System.Nullable<int> Frame { get; set; } 

        /// <summary>The start position of the exon on this annotation's reference sequence, 0-based inclusive. Note
        /// that this is relative to the reference start, and **not** the containing annotation start.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Experiment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The instrument model used as part of this experiment. This maps to sequencing technology in the SAM
        /// spec.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("instrumentModel")]
        public virtual string InstrumentModel { get; set; } 

        /// <summary>A client-supplied library identifier; a library is a collection of DNA fragments which have been
        /// prepared for sequencing from a sample. This field is important for quality control as error or bias can be
        /// introduced during sample preparation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("libraryId")]
        public virtual string LibraryId { get; set; } 

        /// <summary>The platform unit used as part of this experiment, for example flowcell-barcode.lane for Illumina
        /// or slide for SOLiD. Corresponds to the @RG PU field in the SAM spec.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("platformUnit")]
        public virtual string PlatformUnit { get; set; } 

        /// <summary>The sequencing center used as part of this experiment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sequencingCenter")]
        public virtual string SequencingCenter { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read group set export request.</summary>
    public class ExportReadGroupSetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. A Google Cloud Storage URI for the exported BAM file. The currently authenticated user
        /// must have write access to the new file. An error will be returned if the URI already contains
        /// data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exportUri")]
        public virtual string ExportUri { get; set; } 

        /// <summary>Required. The Google Cloud project ID that owns this export. The caller must have WRITE access to
        /// this project.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The reference names to export. If this is not specified, all reference sequences, including
        /// unmapped reads, are exported. Use `*` to export only unmapped reads.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceNames")]
        public virtual System.Collections.Generic.IList<string> ReferenceNames { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The variant data export request.</summary>
    public class ExportVariantSetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The BigQuery dataset to export data to. This dataset must already exist. Note that this
        /// is distinct from the Genomics concept of "dataset".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bigqueryDataset")]
        public virtual string BigqueryDataset { get; set; } 

        /// <summary>Required. The BigQuery table to export data to. If the table doesn't exist, it will be created. If
        /// it already exists, it will be overwritten.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bigqueryTable")]
        public virtual string BigqueryTable { get; set; } 

        /// <summary>If provided, only variant call information from the specified call sets will be exported. By
        /// default all variant calls are exported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetIds")]
        public virtual System.Collections.Generic.IList<string> CallSetIds { get; set; } 

        /// <summary>The format for the exported data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual string Format { get; set; } 

        /// <summary>Required. The Google Cloud project ID that owns the destination BigQuery dataset. The caller must
        /// have WRITE access to this project.  This project will also own the resulting export job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ExternalId : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The id used by the source of this data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The name of the source of this data.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceName")]
        public virtual string SourceName { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `GetIamPolicy` method.</summary>
    public class GetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read group set import request.</summary>
    public class ImportReadGroupSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The ID of the dataset these read group sets will belong to. The caller must have WRITE
        /// permissions to this dataset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>The partition strategy describes how read groups are partitioned into read group sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("partitionStrategy")]
        public virtual string PartitionStrategy { get; set; } 

        /// <summary>The reference set to which the imported read group sets are aligned to, if any. The reference names
        /// of this reference set must be a superset of those found in the imported file headers. If no reference set id
        /// is provided, a best effort is made to associate with a matching reference set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>A list of URIs pointing at [BAM files](https://samtools.github.io/hts-specs/SAMv1.pdf) in Google
        /// Cloud Storage. Those URIs can include wildcards (*), but do not add or remove matching files before import
        /// has completed.
        ///
        /// Note that Google Cloud Storage object listing is only eventually consistent: files added may be not be
        /// immediately visible to everyone. Thus, if using a wildcard it is preferable not to start the import
        /// immediately after the files are created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUris")]
        public virtual System.Collections.Generic.IList<string> SourceUris { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read group set import response.</summary>
    public class ImportReadGroupSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>IDs of the read group sets that were created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSetIds")]
        public virtual System.Collections.Generic.IList<string> ReadGroupSetIds { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The variant data import request.</summary>
    public class ImportVariantsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The format of the variant data being imported. If unspecified, defaults to to `VCF`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("format")]
        public virtual string Format { get; set; } 

        /// <summary>A mapping between info field keys and the InfoMergeOperations to be performed on them. This is
        /// plumbed down to the MergeVariantRequests generated by the resulting import job.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("infoMergeConfig")]
        public virtual System.Collections.Generic.IDictionary<string,string> InfoMergeConfig { get; set; } 

        /// <summary>Convert reference names to the canonical representation. hg19 haploytypes (those reference names
        /// containing "_hap") are not modified in any way. All other reference names are modified according to the
        /// following rules: The reference name is capitalized. The "chr" prefix is dropped for all autosomes and sex
        /// chromsomes. For example "chr17" becomes "17" and "chrX" becomes "X". All mitochondrial chromosomes ("chrM",
        /// "chrMT", etc) become "MT".</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("normalizeReferenceNames")]
        public virtual System.Nullable<bool> NormalizeReferenceNames { get; set; } 

        /// <summary>A list of URIs referencing variant files in Google Cloud Storage. URIs can include wildcards [as
        /// described here](https://cloud.google.com/storage/docs/gsutil/addlhelp/WildcardNames). Note that recursive
        /// wildcards ('**') are not supported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUris")]
        public virtual System.Collections.Generic.IList<string> SourceUris { get; set; } 

        /// <summary>Required. The variant set to which variant data should be imported.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetId")]
        public virtual string VariantSetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The variant data import response.</summary>
    public class ImportVariantsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>IDs of the call sets created during the import.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetIds")]
        public virtual System.Collections.Generic.IList<string> CallSetIds { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A linear alignment can be represented by one CIGAR string. Describes the mapped position and local
    /// alignment of the read to the reference.</summary>
    public class LinearAlignment : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Represents the local alignment of this sequence (alignment matches, indels, etc) against the
        /// reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("cigar")]
        public virtual System.Collections.Generic.IList<CigarUnit> Cigar { get; set; } 

        /// <summary>The mapping quality of this alignment. Represents how likely the read maps to this position as
        /// opposed to other locations.
        ///
        /// Specifically, this is -10 log10 Pr(mapping position is wrong), rounded to the nearest integer.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("mappingQuality")]
        public virtual System.Nullable<int> MappingQuality { get; set; } 

        /// <summary>The position of this alignment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual Position Position { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ListBasesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The offset position (0-based) of the given `sequence` from the start of this `Reference`. This
        /// value will differ for each page in a paginated request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("offset")]
        public virtual System.Nullable<long> Offset { get; set; } 

        /// <summary>A substring of the bases that make up this reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sequence")]
        public virtual string Sequence { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class ListCoverageBucketsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The length of each coverage bucket in base pairs. Note that buckets at the end of a reference
        /// sequence may be shorter. This value is omitted if the bucket width is infinity (the default behaviour, with
        /// no range or `targetBucketWidth`).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bucketWidth")]
        public virtual System.Nullable<long> BucketWidth { get; set; } 

        /// <summary>The coverage buckets. The list of buckets is sparse; a bucket with 0 overlapping reads is not
        /// returned. A bucket never crosses more than one reference sequence. Each bucket has width `bucketWidth`,
        /// unless its end is the end of the reference sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("coverageBuckets")]
        public virtual System.Collections.Generic.IList<CoverageBucket> CoverageBuckets { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The dataset list response.</summary>
    public class ListDatasetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of matching Datasets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasets")]
        public virtual System.Collections.Generic.IList<Dataset> Datasets { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The response message for Operations.ListOperations.</summary>
    public class ListOperationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The standard List next-page token.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>A list of operations that matches the specified filter in the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("operations")]
        public virtual System.Collections.Generic.IList<Operation> Operations { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class MergeVariantsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A mapping between info field keys and the InfoMergeOperations to be performed on them.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("infoMergeConfig")]
        public virtual System.Collections.Generic.IDictionary<string,string> InfoMergeConfig { get; set; } 

        /// <summary>The destination variant set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetId")]
        public virtual string VariantSetId { get; set; } 

        /// <summary>The variants to be merged with existing variants.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variants")]
        public virtual System.Collections.Generic.IList<Variant> Variants { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>This resource represents a long-running operation that is the result of a network API call.</summary>
    public class Operation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If the value is `false`, it means the operation is still in progress. If true, the operation is
        /// completed, and either `error` or `response` is available.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("done")]
        public virtual System.Nullable<bool> Done { get; set; } 

        /// <summary>The error result of the operation in case of failure or cancellation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("error")]
        public virtual Status Error { get; set; } 

        /// <summary>An OperationMetadata object. This will always be returned with the Operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IDictionary<string,object> Metadata { get; set; } 

        /// <summary>The server-assigned name, which is only unique within the same service that originally returns it.
        /// For example `operations/CJHU7Oi_ChDrveSpBRjfuL-qzoWAgEw`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>If importing ReadGroupSets, an ImportReadGroupSetsResponse is returned. If importing Variants, an
        /// ImportVariantsResponse is returned. For pipelines and exports, an empty response is returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("response")]
        public virtual System.Collections.Generic.IDictionary<string,object> Response { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>An event that occurred during an Operation.</summary>
    public class OperationEvent : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required description of event.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>Optional time of when event finished. An event can have a start time and no finish time. If an
        /// event has a finish time, there must be a start time.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual object EndTime { get; set; } 

        /// <summary>Optional time of when event started.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual object StartTime { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Metadata describing an Operation.</summary>
    public class OperationMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>This field is deprecated. Use `labels` instead. Optionally provided by the caller when submitting
        /// the request that creates the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clientId")]
        public virtual string ClientId { get; set; } 

        /// <summary>The time at which the job was submitted to the Genomics service.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("createTime")]
        public virtual object CreateTime { get; set; } 

        /// <summary>The time at which the job stopped running.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("endTime")]
        public virtual object EndTime { get; set; } 

        /// <summary>Optional event messages that were generated during the job's execution. This also contains any
        /// warnings that were generated during import or export.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("events")]
        public virtual System.Collections.Generic.IList<OperationEvent> Events { get; set; } 

        /// <summary>Optionally provided by the caller when submitting the request that creates the operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("labels")]
        public virtual System.Collections.Generic.IDictionary<string,string> Labels { get; set; } 

        /// <summary>The Google Cloud Project in which the job is scoped.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("projectId")]
        public virtual string ProjectId { get; set; } 

        /// <summary>The original request that started the operation. Note that this will be in current version of the
        /// API. If the operation was started with v1beta2 API and a GetOperation is performed on v1 API, a v1 request
        /// will be returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("request")]
        public virtual System.Collections.Generic.IDictionary<string,object> Request { get; set; } 

        /// <summary>Runtime metadata on this Operation.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("runtimeMetadata")]
        public virtual System.Collections.Generic.IDictionary<string,object> RuntimeMetadata { get; set; } 

        /// <summary>The time at which the job began to run.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("startTime")]
        public virtual object StartTime { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Defines an Identity and Access Management (IAM) policy. It is used to specify access control policies
    /// for Cloud Platform resources.
    ///
    /// A `Policy` consists of a list of `bindings`. A `Binding` binds a list of `members` to a `role`, where the
    /// members can be user accounts, Google groups, Google domains, and service accounts. A `role` is a named list of
    /// permissions defined by IAM.
    ///
    /// **Example**
    ///
    /// { "bindings": [ { "role": "roles/owner", "members": [ "user:mike@example.com", "group:admins@example.com",
    /// "domain:google.com", "serviceAccount:my-other-app@appspot.gserviceaccount.com", ] }, { "role": "roles/viewer",
    /// "members": ["user:sean@example.com"] } ] }
    ///
    /// For a description of IAM and its features, see the [IAM developer's
    /// guide](https://cloud.google.com/iam).</summary>
    public class Policy : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Associates a list of `members` to a `role`. Multiple `bindings` must not be specified for the same
        /// `role`. `bindings` with no members will result in an error.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("bindings")]
        public virtual System.Collections.Generic.IList<Binding> Bindings { get; set; } 

        /// <summary>`etag` is used for optimistic concurrency control as a way to help prevent simultaneous updates of
        /// a policy from overwriting each other. It is strongly suggested that systems make use of the `etag` in the
        /// read-modify-write cycle to perform policy updates in order to avoid race conditions: An `etag` is returned
        /// in the response to `getIamPolicy`, and systems are expected to put that etag in the request to
        /// `setIamPolicy` to ensure that their change will be applied to the same version of the policy.
        ///
        /// If no `etag` is provided in the call to `setIamPolicy`, then the existing policy is overwritten
        /// blindly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("etag")]
        public virtual string ETag { get; set; } 

        /// <summary>Version of the `Policy`. The default version is 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual System.Nullable<int> Version { get; set; } 

    }    

    /// <summary>An abstraction for referring to a genomic position, in relation to some already known reference. For
    /// now, represents a genomic position as a reference name, a base number on that reference (0-based), and a
    /// determination of forward or reverse strand.</summary>
    public class Position : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The 0-based offset from the start of the forward strand for that reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("position")]
        public virtual System.Nullable<long> PositionValue { get; set; } 

        /// <summary>The name of the reference in whatever reference set is being used.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>Whether this position is on the reverse strand, as opposed to the forward strand.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("reverseStrand")]
        public virtual System.Nullable<bool> ReverseStrand { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class Program : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The command line used to run this program.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("commandLine")]
        public virtual string CommandLine { get; set; } 

        /// <summary>The user specified locally unique ID of the program. Used along with `prevProgramId` to define an
        /// ordering between programs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The display name of the program. This is typically the colloquial name of the tool used, for
        /// example 'bwa' or 'picard'.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The ID of the program run before this one.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("prevProgramId")]
        public virtual string PrevProgramId { get; set; } 

        /// <summary>The version of the program run.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("version")]
        public virtual string Version { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A 0-based half-open genomic coordinate range for search requests.</summary>
    public class Range : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end position of the range on the reference, 0-based exclusive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The reference sequence name, for example `chr1`, `1`, or `chrX`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The start position of the range on the reference, 0-based inclusive.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A read alignment describes a linear alignment of a string of DNA to a reference sequence, in addition
    /// to metadata about the fragment (the molecule of DNA sequenced) and the read (the bases which were read by the
    /// sequencer). A read is equivalent to a line in a SAM file. A read belongs to exactly one read group and exactly
    /// one read group set.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)
    ///
    /// ### Reverse-stranded reads
    ///
    /// Mapped reads (reads having a non-null `alignment`) can be aligned to either the forward or the reverse strand of
    /// their associated reference. Strandedness of a mapped read is encoded by `alignment.position.reverseStrand`.
    ///
    /// If we consider the reference to be a forward-stranded coordinate space of `[0, reference.length)` with `0` as
    /// the left-most position and `reference.length` as the right-most position, reads are always aligned left to
    /// right. That is, `alignment.position.position` always refers to the left-most reference coordinate and
    /// `alignment.cigar` describes the alignment of this read to the reference from left to right. All per-base fields
    /// such as `alignedSequence` and `alignedQuality` share this same left-to-right orientation; this is true of reads
    /// which are aligned to either strand. For reverse-stranded reads, this means that `alignedSequence` is the reverse
    /// complement of the bases that were originally reported by the sequencing machine.
    ///
    /// ### Generating a reference-aligned sequence string
    ///
    /// When interacting with mapped reads, it's often useful to produce a string representing the local alignment of
    /// the read to reference. The following pseudocode demonstrates one way of doing this:
    ///
    /// out = "" offset = 0 for c in read.alignment.cigar { switch c.operation { case "ALIGNMENT_MATCH",
    /// "SEQUENCE_MATCH", "SEQUENCE_MISMATCH": out += read.alignedSequence[offset:offset+c.operationLength] offset +=
    /// c.operationLength break case "CLIP_SOFT", "INSERT": offset += c.operationLength break case "PAD": out +=
    /// repeat("*", c.operationLength) break case "DELETE": out += repeat("-", c.operationLength) break case "SKIP": out
    /// += repeat(" ", c.operationLength) break case "CLIP_HARD": break } } return out
    ///
    /// ### Converting to SAM's CIGAR string
    ///
    /// The following pseudocode generates a SAM CIGAR string from the `cigar` field. Note that this is a lossy
    /// conversion (`cigar.referenceSequence` is lost).
    ///
    /// cigarMap = { "ALIGNMENT_MATCH": "M", "INSERT": "I", "DELETE": "D", "SKIP": "N", "CLIP_SOFT": "S", "CLIP_HARD":
    /// "H", "PAD": "P", "SEQUENCE_MATCH": "=", "SEQUENCE_MISMATCH": "X", } cigarStr = "" for c in read.alignment.cigar
    /// { cigarStr += c.operationLength + cigarMap[c.operation] } return cigarStr</summary>
    public class Read : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The quality of the read sequence contained in this alignment record (equivalent to QUAL in SAM).
        /// `alignedSequence` and `alignedQuality` may be shorter than the full read sequence and quality. This will
        /// occur if the alignment is part of a chimeric alignment, or if the read was trimmed. When this occurs, the
        /// CIGAR for this read will begin/end with a hard clip operator that will indicate the length of the excised
        /// sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignedQuality")]
        public virtual System.Collections.Generic.IList<System.Nullable<int>> AlignedQuality { get; set; } 

        /// <summary>The bases of the read sequence contained in this alignment record, **without CIGAR operations
        /// applied** (equivalent to SEQ in SAM). `alignedSequence` and `alignedQuality` may be shorter than the full
        /// read sequence and quality. This will occur if the alignment is part of a chimeric alignment, or if the read
        /// was trimmed. When this occurs, the CIGAR for this read will begin/end with a hard clip operator that will
        /// indicate the length of the excised sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignedSequence")]
        public virtual string AlignedSequence { get; set; } 

        /// <summary>The linear alignment for this alignment record. This field is null for unmapped reads.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignment")]
        public virtual LinearAlignment Alignment { get; set; } 

        /// <summary>The fragment is a PCR or optical duplicate (SAM flag 0x400).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("duplicateFragment")]
        public virtual System.Nullable<bool> DuplicateFragment { get; set; } 

        /// <summary>Whether this read did not pass filters, such as platform or vendor quality controls (SAM flag
        /// 0x200).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("failedVendorQualityChecks")]
        public virtual System.Nullable<bool> FailedVendorQualityChecks { get; set; } 

        /// <summary>The observed length of the fragment, equivalent to TLEN in SAM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fragmentLength")]
        public virtual System.Nullable<int> FragmentLength { get; set; } 

        /// <summary>The fragment name. Equivalent to QNAME (query template name) in SAM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("fragmentName")]
        public virtual string FragmentName { get; set; } 

        /// <summary>The server-generated read ID, unique across all reads. This is different from the
        /// `fragmentName`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read alignment information. This must be of the form map (string key mapping to
        /// a list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The mapping of the primary alignment of the `(readNumber+1)%numberReads` read in the fragment. It
        /// replaces mate position and mate strand in SAM.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextMatePosition")]
        public virtual Position NextMatePosition { get; set; } 

        /// <summary>The number of reads in the fragment (extension to SAM flag 0x1).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("numberReads")]
        public virtual System.Nullable<int> NumberReads { get; set; } 

        /// <summary>The orientation and the distance between reads from the fragment are consistent with the sequencing
        /// protocol (SAM flag 0x2).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("properPlacement")]
        public virtual System.Nullable<bool> ProperPlacement { get; set; } 

        /// <summary>The ID of the read group this read belongs to. A read belongs to exactly one read group. This is a
        /// server-generated ID which is distinct from SAM's RG tag (for that value, see ReadGroup.name).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupId")]
        public virtual string ReadGroupId { get; set; } 

        /// <summary>The ID of the read group set this read belongs to. A read belongs to exactly one read group
        /// set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSetId")]
        public virtual string ReadGroupSetId { get; set; } 

        /// <summary>The read number in sequencing. 0-based and less than numberReads. This field replaces SAM flag 0x40
        /// and 0x80.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readNumber")]
        public virtual System.Nullable<int> ReadNumber { get; set; } 

        /// <summary>Whether this alignment is secondary. Equivalent to SAM flag 0x100. A secondary alignment represents
        /// an alternative to the primary alignment for this read. Aligners may return secondary alignments if a read
        /// can map ambiguously to multiple coordinates in the genome. By convention, each read has one and only one
        /// alignment where both `secondaryAlignment` and `supplementaryAlignment` are false.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("secondaryAlignment")]
        public virtual System.Nullable<bool> SecondaryAlignment { get; set; } 

        /// <summary>Whether this alignment is supplementary. Equivalent to SAM flag 0x800. Supplementary alignments are
        /// used in the representation of a chimeric alignment. In a chimeric alignment, a read is split into multiple
        /// linear alignments that map to different reference contigs. The first linear alignment in the read will be
        /// designated as the representative alignment; the remaining linear alignments will be designated as
        /// supplementary alignments. These alignments may have different mapping quality scores. In each linear
        /// alignment in a chimeric alignment, the read will be hard clipped. The `alignedSequence` and `alignedQuality`
        /// fields in the alignment record will only represent the bases for its respective linear alignment.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("supplementaryAlignment")]
        public virtual System.Nullable<bool> SupplementaryAlignment { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A read group is all the data that's processed the same way by the sequencer.</summary>
    public class ReadGroup : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dataset to which this read group belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>A free-form text description of this read group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The experiment used to generate this read group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("experiment")]
        public virtual Experiment Experiment { get; set; } 

        /// <summary>The server-generated read group ID, unique for all read groups. Note: This is different than the
        /// @RG ID field in the SAM spec. For that value, see name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read group information. This must be of the form map (string key mapping to a
        /// list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The read group name. This corresponds to the @RG ID field in the SAM spec.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The predicted insert size of this read group. The insert size is the length the sequenced DNA
        /// fragment from end-to-end, not including the adapters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("predictedInsertSize")]
        public virtual System.Nullable<int> PredictedInsertSize { get; set; } 

        /// <summary>The programs used to generate this read group. Programs are always identical for all read groups
        /// within a read group set. For this reason, only the first read group in a returned set will have this field
        /// populated.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("programs")]
        public virtual System.Collections.Generic.IList<Program> Programs { get; set; } 

        /// <summary>The reference set the reads in this read group are aligned to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>A client-supplied sample identifier for the reads in this read group.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sampleId")]
        public virtual string SampleId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A read group set is a logical collection of read groups, which are collections of reads produced by a
    /// sequencer. A read group set typically models reads corresponding to one sample, sequenced one way, and aligned
    /// one way.
    ///
    /// * A read group set belongs to one dataset. * A read group belongs to one read group set. * A read belongs to one
    /// read group.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class ReadGroupSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dataset to which this read group set belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>The filename of the original source file for this read group set, if any.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filename")]
        public virtual string Filename { get; set; } 

        /// <summary>The server-generated read group set ID, unique for all read group sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional read group set information.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The read group set name. By default this will be initialized to the sample name of the sequenced
        /// data contained in this set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The read groups in this set. There are typically 1-10 read groups in a read group set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroups")]
        public virtual System.Collections.Generic.IList<ReadGroup> ReadGroups { get; set; } 

        /// <summary>The reference set to which the reads in this read group set are aligned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A reference is a canonical assembled DNA sequence, intended to act as a reference coordinate space for
    /// other genomic annotations. A single reference might represent the human chromosome 1 or mitochandrial DNA, for
    /// instance. A reference belongs to one or more reference sets.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class Reference : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The server-generated reference ID, unique across all references.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The length of this reference's sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("length")]
        public virtual System.Nullable<long> Length { get; set; } 

        /// <summary>MD5 of the upper-case sequence excluding all whitespace characters (this is equivalent to SQ:M5 in
        /// SAM). This value is represented in lower case hexadecimal format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksum")]
        public virtual string Md5checksum { get; set; } 

        /// <summary>The name of this reference, for example `22`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>ID from http://www.ncbi.nlm.nih.gov/taxonomy. For example, 9606 for human.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ncbiTaxonId")]
        public virtual System.Nullable<int> NcbiTaxonId { get; set; } 

        /// <summary>All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally with a version number,
        /// for example `GCF_000001405.26`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceAccessions")]
        public virtual System.Collections.Generic.IList<string> SourceAccessions { get; set; } 

        /// <summary>The URI from which the sequence was obtained. Typically specifies a FASTA format file.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUri")]
        public virtual string SourceUri { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>ReferenceBound records an upper bound for the starting coordinate of variants in a particular
    /// reference.</summary>
    public class ReferenceBound : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The name of the reference associated with this reference bound.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>An upper bound (inclusive) on the starting coordinate of any variant in the reference
        /// sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("upperBound")]
        public virtual System.Nullable<long> UpperBound { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A reference set is a set of references which typically comprise a reference assembly for a species,
    /// such as `GRCh38` which is representative of the human genome. A reference set defines a common coordinate space
    /// for comparing reference-aligned experimental data. A reference set contains 1 or more references.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class ReferenceSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Public id of this reference set, such as `GRCh37`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("assemblyId")]
        public virtual string AssemblyId { get; set; } 

        /// <summary>Free text description of this reference set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The server-generated reference set ID, unique across all reference sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Order-independent MD5 checksum which identifies this reference set. The checksum is computed by
        /// sorting all lower case hexidecimal string `reference.md5checksum` (for all reference in this set) in
        /// ascending lexicographic order, concatenating, and taking the MD5 of that value. The resulting value is
        /// represented in lower case hexadecimal format.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksum")]
        public virtual string Md5checksum { get; set; } 

        /// <summary>ID from http://www.ncbi.nlm.nih.gov/taxonomy (for example, 9606 for human) indicating the species
        /// which this reference set is intended to model. Note that contained references may specify a different
        /// `ncbiTaxonId`, as assemblies may contain reference sequences which do not belong to the modeled species, for
        /// example EBV in a human reference genome.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("ncbiTaxonId")]
        public virtual System.Nullable<int> NcbiTaxonId { get; set; } 

        /// <summary>The IDs of the reference objects that are part of this set. `Reference.md5checksum` must be unique
        /// within this set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceIds")]
        public virtual System.Collections.Generic.IList<string> ReferenceIds { get; set; } 

        /// <summary>All known corresponding accession IDs in INSDC (GenBank/ENA/DDBJ) ideally with a version number,
        /// for example `NC_000001.11`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceAccessions")]
        public virtual System.Collections.Generic.IList<string> SourceAccessions { get; set; } 

        /// <summary>The URI from which the references were obtained.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("sourceUri")]
        public virtual string SourceUri { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Runtime metadata that will be populated in the runtimeMetadata field of the Operation associated with a
    /// RunPipeline execution.</summary>
    public class RuntimeMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Execution information specific to Google Compute Engine.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("computeEngine")]
        public virtual ComputeEngine ComputeEngine { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchAnnotationSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The dataset IDs to search within. Caller must have `READ` access to these
        /// datasets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetIds")]
        public virtual System.Collections.Generic.IList<string> DatasetIds { get; set; } 

        /// <summary>Only return annotations sets for which a substring of the name matches this string (case
        /// insensitive).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 128. The
        /// maximum value is 1024.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>If specified, only annotation sets associated with the given reference set are returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>If specified, only annotation sets that have any of these types are returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("types")]
        public virtual System.Collections.Generic.IList<string> Types { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchAnnotationSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The matching annotation sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("annotationSets")]
        public virtual System.Collections.Generic.IList<AnnotationSet> AnnotationSets { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchAnnotationsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Required. The annotation sets to search within. The caller must have `READ` access to these
        /// annotation sets. All queried annotation sets must have the same type.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("annotationSetIds")]
        public virtual System.Collections.Generic.IList<string> AnnotationSetIds { get; set; } 

        /// <summary>The end position of the range on the reference, 0-based exclusive. If referenceId or referenceName
        /// must be specified, Defaults to the length of the reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 256. The
        /// maximum value is 2048.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>The ID of the reference to query.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceId")]
        public virtual string ReferenceId { get; set; } 

        /// <summary>The name of the reference to query, within the reference set associated with this query.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The start position of the range on the reference, 0-based inclusive. If specified, referenceId or
        /// referenceName must be specified. Defaults to 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchAnnotationsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The matching annotations.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("annotations")]
        public virtual System.Collections.Generic.IList<Annotation> Annotations { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The call set search request.</summary>
    public class SearchCallSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Only return call sets for which a substring of the name matches this string.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to
        /// 1024.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>Restrict the query to call sets within the given variant sets. At least one ID must be
        /// provided.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetIds")]
        public virtual System.Collections.Generic.IList<string> VariantSetIds { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The call set search response.</summary>
    public class SearchCallSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of matching call sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSets")]
        public virtual System.Collections.Generic.IList<CallSet> CallSets { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read group set search request.</summary>
    public class SearchReadGroupSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Restricts this query to read group sets within the given datasets. At least one ID must be
        /// provided.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetIds")]
        public virtual System.Collections.Generic.IList<string> DatasetIds { get; set; } 

        /// <summary>Only return read group sets for which a substring of the name matches this string.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 256. The
        /// maximum value is 1024.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read group set search response.</summary>
    public class SearchReadGroupSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The list of matching read group sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSets")]
        public virtual System.Collections.Generic.IList<ReadGroupSet> ReadGroupSets { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read search request.</summary>
    public class SearchReadsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The end position of the range on the reference, 0-based exclusive. If specified, `referenceName`
        /// must also be specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 256. The
        /// maximum value is 2048.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>The IDs of the read groups within which to search for reads. All specified read groups must belong
        /// to the same read group sets. Must specify one of `readGroupSetIds` or `readGroupIds`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupIds")]
        public virtual System.Collections.Generic.IList<string> ReadGroupIds { get; set; } 

        /// <summary>The IDs of the read groups sets within which to search for reads. All specified read group sets
        /// must be aligned against a common set of reference sequences; this defines the genomic coordinates for the
        /// query. Must specify one of `readGroupSetIds` or `readGroupIds`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("readGroupSetIds")]
        public virtual System.Collections.Generic.IList<string> ReadGroupSetIds { get; set; } 

        /// <summary>The reference sequence name, for example `chr1`, `1`, or `chrX`. If set to `*`, only unmapped reads
        /// are returned. If unspecified, all reads (mapped and unmapped) are returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The start position of the range on the reference, 0-based inclusive. If specified, `referenceName`
        /// must also be specified.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The read search response.</summary>
    public class SearchReadsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The list of matching alignments sorted by mapped genomic coordinate, if any, ascending in position
        /// within the same reference. Unmapped reads, which have no position, are returned contiguously and are sorted
        /// in ascending lexicographic order by fragment name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alignments")]
        public virtual System.Collections.Generic.IList<Read> Alignments { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchReferenceSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If present, return reference sets for which a prefix of any of sourceAccessions match any of these
        /// strings. Accession numbers typically have a main number and a version, for example `NC_000001.11`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accessions")]
        public virtual System.Collections.Generic.IList<string> Accessions { get; set; } 

        /// <summary>If present, return reference sets for which a substring of their `assemblyId` matches this string
        /// (case insensitive).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("assemblyId")]
        public virtual string AssemblyId { get; set; } 

        /// <summary>If present, return reference sets for which the md5checksum matches exactly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksums")]
        public virtual System.Collections.Generic.IList<string> Md5checksums { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 1024. The
        /// maximum value is 4096.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchReferenceSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The matching references sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSets")]
        public virtual System.Collections.Generic.IList<ReferenceSet> ReferenceSets { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchReferencesRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>If present, return references for which a prefix of any of sourceAccessions match any of these
        /// strings. Accession numbers typically have a main number and a version, for example
        /// `GCF_000001405.26`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("accessions")]
        public virtual System.Collections.Generic.IList<string> Accessions { get; set; } 

        /// <summary>If present, return references for which the md5checksum matches exactly.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("md5checksums")]
        public virtual System.Collections.Generic.IList<string> Md5checksums { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to 1024. The
        /// maximum value is 4096.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>If present, return only references which belong to this reference set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class SearchReferencesResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The matching references.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("references")]
        public virtual System.Collections.Generic.IList<Reference> References { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The search variant sets request.</summary>
    public class SearchVariantSetsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Exactly one dataset ID must be provided here. Only variant sets which belong to this dataset will
        /// be returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetIds")]
        public virtual System.Collections.Generic.IList<string> DatasetIds { get; set; } 

        /// <summary>The maximum number of results to return in a single page. If unspecified, defaults to
        /// 1024.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The search variant sets response.</summary>
    public class SearchVariantSetsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The variant sets belonging to the requested dataset.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSets")]
        public virtual System.Collections.Generic.IList<VariantSet> VariantSets { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The variant search request.</summary>
    public class SearchVariantsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>Only return variant calls which belong to call sets with these ids. Leaving this blank returns all
        /// variant calls. If a variant has no calls belonging to any of these call sets, it won't be returned at
        /// all.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetIds")]
        public virtual System.Collections.Generic.IList<string> CallSetIds { get; set; } 

        /// <summary>The end of the window, 0-based exclusive. If unspecified or 0, defaults to the length of the
        /// reference.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>The maximum number of calls to return in a single page. Note that this limit may be exceeded in the
        /// event that a matching variant contains more calls than the requested maximum. If unspecified, defaults to
        /// 5000. The maximum value is 10000.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("maxCalls")]
        public virtual System.Nullable<int> MaxCalls { get; set; } 

        /// <summary>The maximum number of variants to return in a single page. If unspecified, defaults to 5000. The
        /// maximum value is 10000.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageSize")]
        public virtual System.Nullable<int> PageSize { get; set; } 

        /// <summary>The continuation token, which is used to page through large result sets. To get the next page of
        /// results, set this parameter to the value of `nextPageToken` from the previous response.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("pageToken")]
        public virtual string PageToken { get; set; } 

        /// <summary>Required. Only return variants in this reference sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The beginning of the window (0-based, inclusive) for which overlapping variants should be returned.
        /// If unspecified, defaults to 0.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>Only return variants which have exactly this name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantName")]
        public virtual string VariantName { get; set; } 

        /// <summary>At most one variant set ID must be provided. Only variants from this variant set will be returned.
        /// If omitted, a call set id must be included in the request.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetIds")]
        public virtual System.Collections.Generic.IList<string> VariantSetIds { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The variant search response.</summary>
    public class SearchVariantsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The continuation token, which is used to page through large result sets. Provide this value in a
        /// subsequent request to return the next page of results. This field will be empty if there aren't any
        /// additional results.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("nextPageToken")]
        public virtual string NextPageToken { get; set; } 

        /// <summary>The list of matching Variants.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variants")]
        public virtual System.Collections.Generic.IList<Variant> Variants { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `SetIamPolicy` method.</summary>
    public class SetIamPolicyRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>REQUIRED: The complete policy to be applied to the `resource`. The size of the policy is limited to
        /// a few 10s of KB. An empty policy is a valid policy but certain Cloud Platform services (such as Projects)
        /// might reject them.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("policy")]
        public virtual Policy Policy { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>The `Status` type defines a logical error model that is suitable for different programming
    /// environments, including REST APIs and RPC APIs. It is used by [gRPC](https://github.com/grpc). The error model
    /// is designed to be:
    ///
    /// - Simple to use and understand for most users - Flexible enough to meet unexpected needs
    ///
    /// # Overview
    ///
    /// The `Status` message contains three pieces of data: error code, error message, and error details. The error code
    /// should be an enum value of google.rpc.Code, but it may accept additional error codes if needed.  The error
    /// message should be a developer-facing English message that helps developers *understand* and *resolve* the error.
    /// If a localized user-facing error message is needed, put the localized message in the error details or localize
    /// it in the client. The optional error details may contain arbitrary information about the error. There is a
    /// predefined set of error detail types in the package `google.rpc` which can be used for common error conditions.
    ///
    /// # Language mapping
    ///
    /// The `Status` message is the logical representation of the error model, but it is not necessarily the actual wire
    /// format. When the `Status` message is exposed in different client libraries and different wire protocols, it can
    /// be mapped differently. For example, it will likely be mapped to some exceptions in Java, but more likely mapped
    /// to some error codes in C.
    ///
    /// # Other uses
    ///
    /// The error model and the `Status` message can be used in a variety of environments, either with or without APIs,
    /// to provide a consistent developer experience across different environments.
    ///
    /// Example uses of this error model include:
    ///
    /// - Partial errors. If a service needs to return partial errors to the client, it may embed the `Status` in the
    /// normal response to indicate the partial errors.
    ///
    /// - Workflow errors. A typical workflow has multiple steps. Each step may have a `Status` message for error
    /// reporting purpose.
    ///
    /// - Batch operations. If a client uses batch request and batch response, the `Status` message should be used
    /// directly inside batch response, one for each error sub-response.
    ///
    /// - Asynchronous operations. If an API call embeds asynchronous operation results in its response, the status of
    /// those operations should be represented directly using the `Status` message.
    ///
    /// - Logging. If some API errors are stored in logs, the message `Status` could be used directly after any
    /// stripping needed for security/privacy reasons.</summary>
    public class Status : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The status code, which should be an enum value of google.rpc.Code.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("code")]
        public virtual System.Nullable<int> Code { get; set; } 

        /// <summary>A list of messages that carry the error details.  There will be a common set of message types for
        /// APIs to use.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("details")]
        public virtual System.Collections.Generic.IList<System.Collections.Generic.IDictionary<string,object>> Details { get; set; } 

        /// <summary>A developer-facing error message, which should be in English. Any user-facing error message should
        /// be localized and sent in the google.rpc.Status.details field, or localized by the client.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("message")]
        public virtual string Message { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Request message for `TestIamPermissions` method.</summary>
    public class TestIamPermissionsRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>REQUIRED: The set of permissions to check for the 'resource'. Permissions with wildcards (such as
        /// '*' or 'storage.*') are not allowed. Allowed permissions are
        ///
        /// * `genomics.datasets.create` * `genomics.datasets.delete` * `genomics.datasets.get` *
        /// `genomics.datasets.list` * `genomics.datasets.update` * `genomics.datasets.getIamPolicy` *
        /// `genomics.datasets.setIamPolicy`</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Response message for `TestIamPermissions` method.</summary>
    public class TestIamPermissionsResponse : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A subset of `TestPermissionsRequest.permissions` that the caller is allowed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("permissions")]
        public virtual System.Collections.Generic.IList<string> Permissions { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A transcript represents the assertion that a particular region of the reference genome may be
    /// transcribed as RNA.</summary>
    public class Transcript : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The range of the coding sequence for this transcript, if any. To determine the exact ranges of
        /// coding sequence, intersect this range with those of the exons, if any. If there are any exons, the
        /// codingSequence must start and end within them.
        ///
        /// Note that in some cases, the reference genome will not exactly match the observed mRNA transcript e.g. due
        /// to variance in the source genome from reference. In these cases, exon.frame will not necessarily match the
        /// expected reference reading frame and coding exon reference bases cannot necessarily be concatenated to
        /// produce the original transcript mRNA.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("codingSequence")]
        public virtual CodingSequence CodingSequence { get; set; } 

        /// <summary>The exons that compose this transcript. This field should be unset for genomes where transcript
        /// splicing does not occur, for example prokaryotes.
        ///
        /// Introns are regions of the transcript that are not included in the spliced RNA product. Though not
        /// explicitly modeled here, intron ranges can be deduced; all regions of this transcript that are not exons are
        /// introns.
        ///
        /// Exonic sequences do not necessarily code for a translational product (amino acids). Only the regions of
        /// exons bounded by the codingSequence correspond to coding DNA sequence.
        ///
        /// Exons are ordered by start position and may not overlap.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("exons")]
        public virtual System.Collections.Generic.IList<Exon> Exons { get; set; } 

        /// <summary>The annotation ID of the gene from which this transcript is transcribed.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("geneId")]
        public virtual string GeneId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class UndeleteDatasetRequest : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A variant represents a change in DNA sequence relative to a reference sequence. For example, a variant
    /// could represent a SNP or an insertion. Variants belong to a variant set.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)
    ///
    /// Each of the calls on a variant represent a determination of genotype with respect to that variant. For example,
    /// a call might assign probability of 0.32 to the occurrence of a SNP named rs1234 in a sample named NA12345. A
    /// call belongs to a call set, which contains related calls typically from one sample.</summary>
    public class Variant : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The bases that appear instead of the reference bases.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alternateBases")]
        public virtual System.Collections.Generic.IList<string> AlternateBases { get; set; } 

        /// <summary>The variant calls for this particular variant. Each one represents the determination of genotype
        /// with respect to this variant.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("calls")]
        public virtual System.Collections.Generic.IList<VariantCall> Calls { get; set; } 

        /// <summary>The date this variant was created, in milliseconds from the epoch.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("created")]
        public virtual System.Nullable<long> Created { get; set; } 

        /// <summary>The end position (0-based) of this variant. This corresponds to the first base after the last base
        /// in the reference allele. So, the length of the reference allele is (end - start). This is useful for
        /// variants that don't explicitly give alternate bases, for example large deletions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("end")]
        public virtual System.Nullable<long> End { get; set; } 

        /// <summary>A list of filters (normally quality filters) this variant has failed. `PASS` indicates this variant
        /// has passed all filters.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("filter")]
        public virtual System.Collections.Generic.IList<string> Filter { get; set; } 

        /// <summary>The server-generated variant ID, unique across all variants.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>A map of additional variant information. This must be of the form map (string key mapping to a list
        /// of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>Names for the variant, for example a RefSNP ID.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("names")]
        public virtual System.Collections.Generic.IList<string> Names { get; set; } 

        /// <summary>A measure of how likely this variant is to be real. A higher value is better.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("quality")]
        public virtual System.Nullable<double> Quality { get; set; } 

        /// <summary>The reference bases for this variant. They start at the given position.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceBases")]
        public virtual string ReferenceBases { get; set; } 

        /// <summary>The reference on which this variant occurs. (such as `chr20` or `X`)</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceName")]
        public virtual string ReferenceName { get; set; } 

        /// <summary>The position at which this variant occurs (0-based). This corresponds to the first base of the
        /// string of reference bases.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("start")]
        public virtual System.Nullable<long> Start { get; set; } 

        /// <summary>The ID of the variant set this variant belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("variantSetId")]
        public virtual string VariantSetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    public class VariantAnnotation : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The alternate allele for this variant. If multiple alternate alleles exist at this location, create
        /// a separate variant for each one, as they may represent distinct conditions.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("alternateBases")]
        public virtual string AlternateBases { get; set; } 

        /// <summary>Describes the clinical significance of a variant. It is adapted from the ClinVar controlled
        /// vocabulary for clinical significance described at:
        /// http://www.ncbi.nlm.nih.gov/clinvar/docs/clinsig/</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("clinicalSignificance")]
        public virtual string ClinicalSignificance { get; set; } 

        /// <summary>The set of conditions associated with this variant. A condition describes the way a variant
        /// influences human health.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("conditions")]
        public virtual System.Collections.Generic.IList<ClinicalCondition> Conditions { get; set; } 

        /// <summary>Effect of the variant on the coding sequence.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("effect")]
        public virtual string Effect { get; set; } 

        /// <summary>Google annotation ID of the gene affected by this variant. This should be provided when the variant
        /// is created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("geneId")]
        public virtual string GeneId { get; set; } 

        /// <summary>Google annotation IDs of the transcripts affected by this variant. These should be provided when
        /// the variant is created.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("transcriptIds")]
        public virtual System.Collections.Generic.IList<string> TranscriptIds { get; set; } 

        /// <summary>Type has been adapted from ClinVar's list of variant types.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A call represents the determination of genotype with respect to a particular variant. It may include
    /// associated information such as quality and phasing. For example, a call might assign a probability of 0.32 to
    /// the occurrence of a SNP named rs1234 in a call set with the name NA12345.</summary>
    public class VariantCall : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The ID of the call set this variant call belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetId")]
        public virtual string CallSetId { get; set; } 

        /// <summary>The name of the call set this variant call belongs to.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("callSetName")]
        public virtual string CallSetName { get; set; } 

        /// <summary>The genotype of this variant call. Each value represents either the value of the `referenceBases`
        /// field or a 1-based index into `alternateBases`. If a variant had a `referenceBases` value of `T` and an
        /// `alternateBases` value of `["A", "C"]`, and the `genotype` was `[2, 1]`, that would mean the call
        /// represented the heterozygous value `CA` for this variant. If the `genotype` was instead `[0, 1]`, the
        /// represented value would be `TA`. Ordering of the genotype values is important if the `phaseset` is present.
        /// If a genotype is not called (that is, a `.` is present in the GT string) -1 is returned.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("genotype")]
        public virtual System.Collections.Generic.IList<System.Nullable<int>> Genotype { get; set; } 

        /// <summary>The genotype likelihoods for this variant call. Each array entry represents how likely a specific
        /// genotype is for this call. The value ordering is defined by the GL tag in the VCF spec. If Phred-scaled
        /// genotype likelihood scores (PL) are available and log10(P) genotype likelihood scores (GL) are not, PL
        /// scores are converted to GL scores.  If both are available, PL scores are stored in `info`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("genotypeLikelihood")]
        public virtual System.Collections.Generic.IList<System.Nullable<double>> GenotypeLikelihood { get; set; } 

        /// <summary>A map of additional variant call information. This must be of the form map (string key mapping to a
        /// list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>If this field is present, this variant call's genotype ordering implies the phase of the bases and
        /// is consistent with any other variant calls in the same reference sequence which have the same phaseset
        /// value. When importing data from VCF, if the genotype data was phased but no phase set was specified this
        /// field will be set to `*`.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("phaseset")]
        public virtual string Phaseset { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>A variant set is a collection of call sets and variants. It contains summary statistics of those
    /// contents. A variant set belongs to a dataset.
    ///
    /// For more genomics resource definitions, see [Fundamentals of Google Genomics](https://cloud.google.com/genomics
    /// /fundamentals-of-google-genomics)</summary>
    public class VariantSet : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>The dataset to which this variant set belongs.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("datasetId")]
        public virtual string DatasetId { get; set; } 

        /// <summary>A textual description of this variant set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>The server-generated variant set ID, unique across all variant sets.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>The metadata associated with this variant set.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("metadata")]
        public virtual System.Collections.Generic.IList<VariantSetMetadata> Metadata { get; set; } 

        /// <summary>User-specified, mutable name.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("name")]
        public virtual string Name { get; set; } 

        /// <summary>A list of all references used by the variants in a variant set with associated coordinate upper
        /// bounds for each one.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceBounds")]
        public virtual System.Collections.Generic.IList<ReferenceBound> ReferenceBounds { get; set; } 

        /// <summary>The reference set to which the variant set is mapped. The reference set describes the alignment
        /// provenance of the variant set, while the `referenceBounds` describe the shape of the actual variant data.
        /// The reference set's reference names are a superset of those found in the `referenceBounds`.
        ///
        /// For example, given a variant set that is mapped to the GRCh38 reference set and contains a single variant on
        /// reference 'X', `referenceBounds` would contain only an entry for 'X', while the associated reference set
        /// enumerates all possible references: '1', '2', 'X', 'Y', 'MT', etc.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("referenceSetId")]
        public virtual string ReferenceSetId { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }    

    /// <summary>Metadata describes a single piece of variant call metadata. These data include a top level key and
    /// either a single value string (value) or a list of key-value pairs (info.) Value and info are mutually
    /// exclusive.</summary>
    public class VariantSetMetadata : Google.Apis.Requests.IDirectResponseSchema
    {
        /// <summary>A textual description of this metadata.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("description")]
        public virtual string Description { get; set; } 

        /// <summary>User-provided ID field, not enforced by this API. Two or more pieces of structured metadata with
        /// identical id and key fields are considered equivalent.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("id")]
        public virtual string Id { get; set; } 

        /// <summary>Remaining structured metadata key-value pairs. This must be of the form map (string key mapping to
        /// a list of string values).</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("info")]
        public virtual System.Collections.Generic.IDictionary<string,System.Collections.Generic.IList<object>> Info { get; set; } 

        /// <summary>The top-level key.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("key")]
        public virtual string Key { get; set; } 

        /// <summary>The number of values that can be included in a field described by this metadata.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("number")]
        public virtual string Number { get; set; } 

        /// <summary>The type of data. Possible types include: Integer, Float, Flag, Character, and String.</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("type")]
        public virtual string Type { get; set; } 

        /// <summary>The value field for simple metadata</summary>
        [Newtonsoft.Json.JsonPropertyAttribute("value")]
        public virtual string Value { get; set; } 

        /// <summary>The ETag of the item.</summary>
        public virtual string ETag { get; set; }
    }
}
